std::is_trivially_copyable这两个编译器中的任何一个都不支持(至少就gcc 4.6而言).但两者都提供__has_trivial_copy了相当不错的指令.除了它被删除的复制构造函数.
struct A { A(A const&) =delete; };
Run Code Online (Sandbox Code Playgroud)
__has_trivial_copy(A) 在clang中返回1,在gcc中返回0.
我正在挖掘标准,并且找不到一个条款,说明当删除复制构造函数时,该类是否仍被认为是可复制的.
谁是对的?
我倾向于相信gcc是正确的,因为struct A根本不可复制,更不用说可以轻易复制了.此外,还有一个广泛的共识,即删除的拷贝构造函数可以看作是一个私有声明但未定义的构造函数,在这种情况下gcc仍然是正确的.
另一方面,第9/6节中的标准描述了没有任何非平凡操作的简单可复制性.我想如果你按照书面标准阅读标准,铿锵可能是正确的.