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;
}
このコードは合法ですか? Me
そうでない場合、として定義されていた場合、それは合法でしょうtypedef S Me;
か?