问题
在linux云服务器上使用g++,想要使用万能引用去给类内的成员函数作为形参。
但发生如下错误:
但使用vs2019来编译这段代码却没有问题,能够正确执行。
下方是测试代码:
template<class T>
class A
{
public:
template<class T> //重声明错误
void fun1(T&& x)
{}
template<class V>
void fun2(V&& x)//得改个模板参数名才能正确运行
{}
};
int main()
{
int x = 0;
A<int> a;
a.fun1(x);
fun2(x);
return 0;
}
结论:
- g++是对的。
原因:
- clang 用于阻止它的规则是:C++ 2011 [temp.local] 第 6 段:模板参数不得在其范围内重新声明(包括嵌套范围)。
- 而vs并没有遵循标准。