【发布时间】:2023-04-10 14:30:01
【问题描述】:
考虑以下代码:
// in main.cpp
#include <type_traits>
struct A {
A& operator=(const A&) = default;
A& operator=(A&&) = default;
};
int main() {
static_assert(std::is_pod<A>::value);
return 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 的任何原因。它的默认移动赋值运算符是微不足道的。注意POD is going to become deprecated in C++20.
标签: c++ visual-c++ g++