c ++编译器将模板语法视为'<'操作者

时间:2011-11-30 05:16:11

标签: c++ templates compiler-errors

我正在尝试编译以下代码:

struct A {
    template<int N> static void a() {}
};

template<> void A::a<5>() {}

template<class T>
struct B {
    static void b() {
        T::a<5>();
    }
};

void test() {
    A::a<5>();
    B<A>::b();
}

并且编译器将<中的T::a<5>解释为运算符<,从而导致错误:

invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’

有没有办法在没有编译器错误的情况下显式实例化T::a<5>? 谢谢。

gcc版本4.5.1 20100924(Red Hat 4.5.1-4)(GCC)

1 个答案:

答案 0 :(得分:6)

是的,将该行更改为:

T::template a<5>();

编译器不知道T::a是否是一个函数(因为它具有template性质)。通过提及template,您可以明确地通知编译器。这个问题被多次询问,这里是one of them