我想知道以下代码是否应该被认为是有效的 c++、gcc 和 clang 都扼杀了它,而我们的项目使用的 Microsoft 和嵌入式编译器(青山)似乎可以毫无问题地解析它。这行代码给 gcc 和 clang 带来了麻烦:
foo().Bar<int>();
gcc 似乎认为 < 是小于运算符,而不是指定模板参数。如果 Bar 更改为不是模板函数 gcc 接受它。
class Test1
{
public:
template<typename U>
static void Bar() {}
};
template<typename T>
class Test2
{
public:
Test2()
{
foo().Bar<int>();
}
Test1 foo() { return t; }
Test1 t;
};
int main()
{
Test2<int> t;
}
根据我的研究,在对象实例上调用静态成员函数是有效的 C++。那你有什么想法?这是 gcc 的错误:
Error.cpp: In constructor ‘Test2<T>::Test2()’:
Error.cpp:14:17: error: expected primary-expression before ‘int’
foo().Bar<int>();
^
Error.cpp:14:17: error: expected ‘;’ before ‘int’