private
非静的データメンバーがあるため、クラスは集計として適格ではありません。
アグリゲートは、ユーザー提供のコンストラクター(12.1)、非静的データメンバー用のブレースまたはイコールイニシャライザー(9.2)、プライベートまたは保護された非静的データメンバー(条項11)、基本クラスなし(条項10)、および仮想関数なし(10.3)。
編集:
非集約クラスのオブジェクトの場合、一部のデータメンバーのみが初期化されると、残りは値が初期化されます(0が割り当てられます)?
ルールは次のように指定されます。
C ++ 11 8.5.4リスト初期化[dcl.init.list]パラ3:
オブジェクトまたはタイプTの参照のリスト初期化は、次のように定義されます
。—初期化子リストに要素がなく、Tがデフォルトのコンストラクターを持つクラス型である場合、オブジェクトは値で初期化されます。
—それ以外の場合、Tがアグリゲートの場合、アグリゲートの初期化が実行されます(8.5.1)。
—それ以外の場合、Tがstd :: initializer_listの特殊化である場合、initializer_listオブジェクトは以下に説明するように構築され、同じタイプのクラスからのオブジェクトの初期化のルールに従ってオブジェクトを初期化するために使用されます(8.5)。
—それ以外の場合、Tがクラス型の場合、コンストラクターが考慮されます。該当するコンストラクターが列挙され、オーバーロード解決(13.3、13.3.1.7)によって最適なコンストラクターが選択されます。引数のいずれかを変換するためにナローイング変換(以下を参照)が必要な場合、プログラムの形式が正しくありません。
—それ以外の場合、Tが参照型の場合、Tによって参照される型の一時的なprvalueはリストで初期化され、参照はその一時的なものにバインドされます。[注:通常どおり、参照型が非const型への左辺値参照である場合、バインディングは失敗し、プログラムは不正な形式になります。—end note]
—それ以外の場合、イニシャライザリストに単一の要素がある場合、オブジェクトまたはリファレンスはその要素から初期化されます。要素をTに変換するためにナローイング変換(以下を参照)が必要な場合、プログラムの形式が正しくありません。
—それ以外の場合、初期化子リストに要素がない場合、オブジェクトは値で初期化されます。
—それ以外の場合、プログラムの形式が正しくありません。
あなたのプログラムは、言及されたシナリオのいずれにも当てはまらないため、不正なケースに当てはまります。