模板成员函数重载问题

时间:2014-12-31 06:03:30

标签: c++ templates language-lawyer overloading

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(){ }

DEMO

相比之下,程序

#include <iostream>

struct A
{
    static void foo(){ }

    static int foo(){ return 0; }
};

int main(){ }

是不正确的

DEMO

第一个例子是错误吗?

1 个答案:

答案 0 :(得分:0)

目前是CWG #1252的主题:

  

标准不允许重载成员函数   仅在返回类型上有所不同(参见enable_if)。

您引用的措辞可能会被修改,因为没有任何理由不允许在返回类型中基于SFINAE重载成员函数模板;我认为标准是有缺陷的,实现是正确的。

相关问题