template<typename T>
struct function
{
typedef T type;
template<typename U>
static void f() {}
};
template<typename T>
struct caller
{
int count;
caller(): count() {}
void operator()()
{
count++;
T::f<typename T::type>();
}
};
int main() {
caller<function<int> > call;
call();
return 0;
}
这对我来说似乎是对的,但编译器给出了这个我无法理解的丑陋错误:
prog.cpp:在成员函数'void caller :: operator()()'中:
之前的预期主要表达式
prog.cpp:17:错误:预期`(在'&gt;'之前''令牌
prog.cpp:17:错误:')'令牌
为了您的谨慎,代码发布在这里 - &gt; http://www.ideone.com/vtP7G
答案 0 :(得分:3)
T::template f<typename T::type>();
如果没有此“模板”,代码将被解析为:
T::f [less-than operator] typename T::type [greater-than operator]...
这是一个错误。