小编La *_*ura的帖子

为什么 is_trivially_copyable_v 在 GCC 和 MSVC 中不同?

运行这个简单的程序时,根据编译器的不同,会观察到不同的行为。

\n

true在由 GCC 11.2 编译时以及false由带有 的 MSVC 19.29.30137 编译时打印(两者都是今天的最新版本)。

\n
#include <type_traits>\n#include <iostream>\n\nstruct S {\n    int a;\n    \n    S()                     = delete;\n    S(S const &)            = delete;\n    S(S &&)                 = delete;\n    S &operator=(S const &) = delete;\n    S &operator=(S &&)      = delete;\n    ~S()                    = delete;\n};\n\nint main() {\n    std::cout << std::boolalpha;\n    std::cout << std::is_trivially_copyable_v<S>;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

相关引用(来自最新的C++23工作草案N4901):

\n

给定 20.15.5.4 [meta.unary.prop],如果 T 是如 6.8.1/9 [basic.types.general] 中定义的std::is_trivially_copyable_v<T>a,则定义为 true :trivially copyable type

\n
\n

算术类型 …

c++ type-traits language-lawyer c++20

14
推荐指数
1
解决办法
999
查看次数

标签 统计

c++ ×1

c++20 ×1

language-lawyer ×1

type-traits ×1