この構造は完全に合法であるため、
A a4((C()));
問題は、コピーの初期化を使用することです。本当に、あなたの例は次のようになります
A a4((A(C()));
8.5/16
初期化子のセマンティクスは次のとおりです。宛先の型は初期化されるオブジェクトまたは参照の型であり、ソースの型は初期化式の型です。初期化子が単一の (おそらく括弧で囲まれた) 式でない場合、ソースの型は定義されていません。
宛先の型が (おそらく cv 修飾された) クラス型の場合:
— それ以外の場合 (つまり、残りのコピー初期化の場合)、ソース型から宛先型、または (変換関数が使用されている場合) その派生クラスに変換できるユーザー定義の変換シーケンスは、13.3 で説明されているように列挙されます。 .1.4 であり、過負荷の解決 (13.3) によって最適なものが選択されます。
13.3.1.4/1
8.5 で指定された条件下では、クラス型のオブジェクトのコピー初期化の一部として、ユーザー定義の変換を呼び出して、初期化子式を初期化されるオブジェクトの型に変換できます。
オーバーロードの解決は、呼び出すユーザー定義の変換を選択するために使用されます。「cv1 T」が初期化されるオブジェクトの型であり、T がクラス型であると仮定すると、候補関数は次のように選択されます。 — T の変換コンストラクター (12.3.1) は候補関数です。
— 初期化式の型がクラス型「cv S」の場合、S とその基底クラスの非明示的な変換関数が考慮されます。
13.3.3.1/4
ただし、13.3.1.3 でクラスのコピー初期化の 2 番目のステップでテンポラリのコピー/移動のために呼び出されたときに候補となるコンストラクターまたはユーザー定義の変換関数の引数を考慮すると、13.3.1.7 で渡すときに単一の引数としての初期化子リスト、または初期化子リストに要素が 1 つだけあり、何らかのクラス X への変換または (おそらく cv 修飾された) X への参照が X のコンストラクターの最初のパラメーターと見なされる場合、または13.3.1.4によって、13.3.1.5、または 13.3.1.6 のいずれの場合も、標準の変換シーケンスと省略記号の変換シーケンスのみが考慮されます。
この場合、ユーザー定義の変換 (C -> B) は考慮されません。