C++ POD类型是否可以使用显式声明的默认移动分配运算符?

C++ POD类型是否可以使用显式声明的默认移动分配运算符?,c++,visual-c++,g++,C++,Visual C++,G++,考虑到以下准则: //在main.cpp中 #包括 结构A{ A&运算符=(常量A&)=默认值; A&运算符=(A&&)=默认值; }; int main(){ 静态_断言(std::is_pod::value); 返回0; } 您可以看到,struct a有一个默认的移动赋值操作符 在msvc(VS2017)中,使用cl/std:c++17 main.cpp,我得到了一个静态断言失败 在g++(MinGW-W64,8.1.0)中,使用g++-std=c++17 main.cpp,没有出现任何

考虑到以下准则:

//在main.cpp中
#包括
结构A{
A&运算符=(常量A&)=默认值;
A&运算符=(A&&)=默认值;
};
int main(){
静态_断言(std::is_pod::value);
返回0;
}
您可以看到,
struct a
有一个默认的移动赋值操作符

在msvc(VS2017)中,使用
cl/std:c++17 main.cpp
,我得到了一个静态断言失败

g++(MinGW-W64,8.1.0)中,使用
g++-std=c++17 main.cpp
,没有出现任何问题

但是,如果我注释掉
A&operator=(A&&&)=default,两个编译器中的一切都正常


那么,POD类型是否可以使用显式声明的默认移动分配运算符?

我看不出为什么
a
不应该是POD。它的默认移动赋值运算符是平凡的。请注意。