我正在尝试编译以下代码:
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)
答案 0 :(得分:6)
是的,将该行更改为:
T::template a<5>();
编译器不知道T::a
是否是一个函数(因为它具有template
性质)。通过提及template
,您可以明确地通知编译器。这个问题被多次询问,这里是one of them。