Это минимальный тестовый пример некоторого кода, который у меня есть. Он терпит неудачу, когда пытается оценить a.getResult<B>()
:
test.cpp: In function 'void printStuff(const A&)':
test.cpp:6: error: expected primary-expression before '>' token
test.cpp:6: error: expected primary-expression before ')' token
Код:
#include <iostream>
template< class A, class B>
void printStuff( const A& a)
{
size_t value = a.getResult<B>();
std::cout << value << std::endl;
}
struct Firstclass {
template< class X >
size_t getResult() const {
X someInstance;
return sizeof(someInstance);
}
};
int main(int, char**) {
Firstclass foo;
printStuff<Firstclass, short int>(foo);
printStuff<Firstclass, double>(foo);
std::cout << foo.getResult< double >() << std::endl;
return 0;
}
Если я прокомментирую функцию printStuff
и где она вызвала, вызов foo.getResult< double >()
компилируется и делает то, что ожидается.
Любая идея, что происходит? Я некоторое время работаю с расширенным шаблоном кода и никогда не встречал ничего подобного.