test.cxxに次のようなものがあるとします(そして、意図的に1でオブジェクトスライスを実行します)。
class A {
};
class B : public A {
// prevent copy construction and assignment
B(const B& other);
B& operator=(const B& other);
public:
explicit B(){}
};
class C {
A m_a;
public:
explicit C() : m_a( B() ) {} // 1
};
1の場合、クラスAのコピーコンストラクター(ここではコンパイラーによって生成され、パブリック)を呼び出す必要があるため、これが機能することを期待しています。このコードは最近のコンパイラー(g++-4.4とIntel11.0を試しました)でも正常にコンパイルされますが、古いコンパイラー(g++-4.2やg++-4.0など)は、プライベートと宣言したBのコピーコンストラクターを呼び出そうとします。その結果:
test.cxx:コンストラクター内'C :: C()': test.cxx:7:エラー:'B :: B(const B&)'はプライベートです test.cxx:16:エラー:このコンテキスト内
さて、私のビルドシステムで、コンパイラが上記のコードをサポートしているかどうかを確認したいと思います。しかし、質問は、この標準に準拠したコードですか?そして、そのようなテストの固有名は何でしょうか?
編集:申し訳ありませんが、Intelコンパイラバージョン10.1と11.0はどちらも次の問題を発行します:警告#734:削除されたコピーに必要な "B :: B(const B&)"(6行目で宣言)にアクセスできません