N4296::13.1/2.2 [over.load]
处的标准说:
同样,具有相同名称的成员函数模板声明, 相同的参数类型列表和相同的模板参数列表 如果它们中的任何一个是静态成员函数,则不能重载 模板声明。
所以,我认为以下程序将是不正确的:
#include <iostream>
struct A
{
template <typename T>
static void foo(){ }
template <typename T>
static int foo(){ return 0; }
};
int main(){ }
相比之下,程序
#include <iostream>
struct A
{
static void foo(){ }
static int foo(){ return 0; }
};
int main(){ }
是不正确的
第一个例子是错误吗?
答案 0 :(得分:0)
目前是CWG #1252的主题:
标准不允许重载成员函数 仅在返回类型上有所不同(参见
enable_if
)。
您引用的措辞可能会被修改,因为没有任何理由不允许在返回类型中基于SFINAE重载成员函数模板;我认为标准是有缺陷的,实现是正确的。