「バリアントメンバー」は、C++11の9.5/8で定義されています。
ユニオンのようなクラスは、ユニオンまたは直接メンバーとして匿名のユニオンを持つクラスです。ユニオンのようなクラスXには、一連のバリアントメンバーがあります。Xがユニオンの場合、そのバリアントメンバーは非静的データメンバーです。それ以外の場合、そのバリアントメンバーは、Xのメンバーであるすべての匿名ユニオンの非静的データメンバーです。
つまり、ユニオンのすべての非静的データメンバーは「バリアントメンバー」であり、匿名ユニオンを含むクラスの場合、それらの非静的データメンバーはクラスの「バリアントメンバー」です。
引用したコンテキストは12.1/5であり、ユニオンのようなクラスに重要なデフォルトコンストラクターを持つバリアントメンバーがある場合、クラス自体のデフォルトコンストラクターが削除されることを示しています。問題は、クラスのデフォルトコンストラクターによってどのバリアントメンバーを構築する必要があるかであり、解決策はデフォルトコンストラクターを持たないことです。すべてのバリアントメンバーに些細なデフォルトコンストラクターがある場合、何もしないことでクラスのデフォルトコンストラクターがそれらのすべて/なしを等しく構築するため、問題はありません。
boost::variant
別のものです。boost::variant
「一部のサイト」が「特定のサイトが保持できる可能性のあるタイプ」、つまりその「メンバー」を意味するときに「バリアントメンバー」と言っても、それほど驚くことではありませんvariant
。しかし、それはC++11標準で新しく定義された意味ではありません。