コード:
struct A{
int a;
virtual void f(){}
};
union B{
A ob;
};
コンパイル時エラー:
C:\to\main.cpp|9|error: member 'A B::ob' with constructor not allowed in union|
C:\to\main.cpp|9|error: member 'A B::ob' with copy assignment operator not allowed in union|
||=== Build finished: 2 errors, 0 warnings ===|
c ++ 03標準:
自明でないコンストラクター(12.1)、自明でないコピーコンストラクター(12.8)、自明でないデストラクタ(12.4)、または自明でないコピー代入演算子(13.5.3、12.8)を持つクラスのオブジェクトはできませんユニオンのメンバーになることも、そのようなオブジェクトの配列にすることもできません。ユニオンに静的データメンバーまたは参照型のメンバーが含まれている場合、プログラムの形式が正しくありません。
標準では、仮想関数を持つクラスのオブジェクトについては何も述べておらず、エラーから、コンパイラーは、私が使用しなかったコンストラクターとコピー代入演算子について文句を言います。これはコンパイラのバグですか?gccを使用しています。