模板的丑陋编译器错误

2024-03-07

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: 错误:在“>”标记之前应有“(”
prog.cpp:17: 错误:‘)’ 标记之前需要主表达式

为了您的方便,代码发布在这里->http://www.ideone.com/vtP7G http://www.ideone.com/vtP7G


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

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

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

这是一个错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板的丑陋编译器错误 的相关文章

随机推荐