union のメンバに対する制限が(とくに制限する理由もなかったので)解除され、
参照以外の全ての型を持つことができるようになる
union U { int i; float f; std::string s; // 今まではできなかった };
今まではこの制限のためにテンプレートやキャストを使っていたが
今回の変更で union がより強力でより便利になる
注意事項
・参照型をメンバにすることはできない
・静的メンバを持つことができる
・メンバ関数を持つことはできるが、仮想関数を持つことはできない
・基本クラスを持ってはならない
・基本クラスとして使用されてはならない
・ある共用体のメンバ、もしくはあるクラス内の匿名共用体のメンバに対して
non-trivial な特殊メンバ関数が定義された場合、その特殊メンバ関数は
その共用体またはクラスに対して、 deleted 定義される
・暗黙に deleted 定義された関数を、 defaulted にすることはできない
※ 特殊メンバ関数 : コンストラクタ、コピーコンストラクタ、コピー代入演算子、デストラクタ
※ non-trivial な特殊メンバ関数 : コンパイラが自動生成したものではなく、ユーザーが明示的に定義した特殊メンバ関数
※ non-trivial は訳すなら「非自明な〜」でいいのかな
N2544 Unrestricted Unions (Revision 2)