Jest to minimalny przypadek testowy kodu, który faktycznie mam. To nie kiedy próbuje ocenić a.getResult<B>()
:Szablony: funkcja szablonu nie gra dobrze z funkcją elementu szablonu klasy
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
Kod jest:
#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;
}
Gdybym wykomentuj funkcję printStuff
i gdzie to się nazywa, wywołanie foo.getResult<double>()
kompiluje dobrze i robi to, co ma.
Każdy pomysł, co się dzieje? Od jakiegoś czasu pracuję z obszernie szablonowym kodem i nigdy nie spotkałem się z niczym podobnym.
Wow, właśnie ja, kiedy myślałam, że znam wszystko było wiedzieć o C++ ... –
Dzięki! To najbardziej dziwna składnia, jaką widziałem w C++. –
W jakiś sposób VC++ jest dość łagodny (tzn. Często można uciec bez niego), ale gcc zdecydowanie nie jest! –