Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 存在同名成员函数时成员函数模板的类外定义-编译器分歧_C++_Templates_Overloading_Language Lawyer_Ambiguous - Fatal编程技术网

C++ 存在同名成员函数时成员函数模板的类外定义-编译器分歧

C++ 存在同名成员函数时成员函数模板的类外定义-编译器分歧,c++,templates,overloading,language-lawyer,ambiguous,C++,Templates,Overloading,Language Lawyer,Ambiguous,考虑以下示例:一个类模板包含一个成员函数和一个成员函数模板,这两个模板都命名为f,然后尝试定义和专门化成员函数模板: 模板 结构A{ 无效f(); 模板 无效f(); }; 模板 模板 void A::f(){} 模板 模板 void A::f(){} 这合法吗?成员函数模板定义应该如何编写 在f的第一个定义中,模板声明是否确保应选择成员函数模板f,而不是成员函数f,即使模板参数未出现在类型中?我看不到任何进一步消除歧义的方法,因为编写::template f(),::f(),::f(),或两

考虑以下示例:一个类模板包含一个成员函数和一个成员函数模板,这两个模板都命名为
f
,然后尝试定义和专门化成员函数模板:

模板
结构A{
无效f();
模板
无效f();
};
模板
模板
void A::f(){}
模板
模板
void A::f(){}
这合法吗?成员函数模板定义应该如何编写

f
的第一个定义中,模板声明是否确保应选择成员函数模板
f
,而不是成员函数
f
,即使模板参数未出现在类型中?我看不到任何进一步消除歧义的方法,因为编写
::template f()
::f()
::f()
,或两者的组合似乎没有帮助

编译器结果:

  • 叮当声:在
    f
  • Visual Studio:已成功编译
  • gcc:在
    f
  • EDG:编译成功
相比之下,每个编译器都在命名空间范围内接受等价的:

名称空间X{
无效f();
模板
无效f();
}
模板
void X::f(){}
模板
void X::f(){}