如果特殊成员函数使用 typedef,可以默认它们吗?

Meh*_*dad 8 c++ language-lawyer defaulted-functions

Clang 编译得很好,但 GCC 和 MSVC 抱怨不能operator=默认:

#include <type_traits>

template<class T>
struct S
{
    typedef typename std::enable_if<!std::is_enum<T>::value, S>::type Me;
    S &operator=(Me const &) = default;
};

int main()
{
    S<int> s1, s2;
    s1 = s2;
}
Run Code Online (Sandbox Code Playgroud)

这段代码合法吗?如果不是,那么Me定义为是否合法typedef S Me;

Meh*_*dad 1

鉴于缺乏任何相反的迹象,我将回答我自己的问题并说,就我在标准中找到的相关条款而言,我认为代码是合法的,因此 GCC 和 MSVC错误地抱怨。

正如上面有人指出的,似乎有一个错误报告跟踪此问题。