我得到了以下代码(不要争论它是否有意义,这只是一个最小的例子):
struct X{
template <typename T>
T foo(){ return T(); }
};
template <typename T>
struct Z{
virtual X bar(){
bar().foo<int>();
return X();
}
};
它不能在我的 g++4.6.3 上编译。该行bar().foo<int>();
给出以下错误:
error: expected primary-expression before ‘int’
error: expected ‘;’ before ‘int’
当我第一次将 bar() 的结果保存在局部变量中时,它会起作用,即如果我替换bar().foo<int>()
为
X x = bar();
x.foo<int>();
然后它工作。如果我现在声明局部变量auto
而不是X
,即:
auto x = bar();
x.foo<int>();
然后我收到与以前相同的错误。如果我从类 Z 中删除类型参数(即,使其成为普通类而不是模板类),那么它会再次起作用。
如果我使用类类型X
而不是int
foo 的类型参数 ie foo<X>
,那么我会收到以下错误:
expected primary-expression before ‘>’ token
expected primary-expression before ‘)’ token
我真的无法在这里发现错误。请帮忙!