小编D. *_*ine的帖子

POD 类型可以有一个显式声明的默认移动赋值运算符吗?

考虑以下代码:

// 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;
}
Run Code Online (Sandbox Code Playgroud)

您可以看到有一个默认的移动赋值运算符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 类型可以有一个显式声明的默认移动赋值运算符吗?

c++ g++ visual-c++

5
推荐指数
1
解决办法
110
查看次数

标签 统计

c++ ×1

g++ ×1

visual-c++ ×1