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

Can special member functions be defaulted if they use typedefs?

Clang compiles this fine, but GCC and MSVC complain 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;
}

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

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

正如上面有人指出的那样,似乎有一个 bug report 跟踪这个问题。