模板的丑陋编译器错误

时间:2011-02-19 12:54:02

标签: c++ templates

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

1 个答案:

答案 0 :(得分:3)

T::template f<typename T::type>();

如果没有此“模板”,代码将被解析为:

T::f [less-than operator] typename T::type [greater-than operator]...

这是一个错误。