std::is_trivially_copyable
これら 2 つのコンパイラのいずれでもまだサポートされていません (少なくとも 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 が正しいのかもしれません。