std::is_trivially_copyable
这两个编译器中的任何一个仍然不支持(至少就 gcc 4.6 而言)。但是两者都提供__has_trivial_copy
了做得很好的指令。除非涉及已删除的复制构造函数。
struct A { A(A const&) =delete; };
__has_trivial_copy(A)
在 clang 中返回 1,在 gcc 中返回 0。
我正在研究标准,找不到一个子句,说明当删除复制构造函数时,该类是否仍被认为是可简单复制的。
谁是对的?
我倾向于相信 gcc 是正确的,因为struct A
根本不可复制,更不用说微不足道的可复制了。此外,还有一个广泛的共识,即删除的复制构造函数可以视为私有声明但未定义的构造函数,在这种情况下 gcc 仍然是正确的。
另一方面,第 9/6 节中的标准描述了不具有任何非平凡操作的平凡可复制性。我想如果你按照书面标准阅读,clang 可能是对的。