如果特殊成员函数使用 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 跟踪这个问题。
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 跟踪这个问题。