質問はthis answerの文脈で浮かび上がった。キャスト演算子が型への型と参照が宣言されている場合、ダイレクトリストの初期化によって型参照キャストがあいまいになるのはなぜですか?
は例を考えてみましょう:
struct foo {
int value;
operator int&(){ return value; }
operator int(){ return value; }
};
int main() {
int &a(foo{}); // #1
//int &b{foo{}}; // #2 -- ambiguity
int &c = foo{}; // #3
//int &d = {foo{}}; // #4-- ambiguity
int &d { a }; // #5
int &e = { a }; // #6
(void)a;
(void)c;
(void)d;
(void)e;
}
#1と#3はそうではない私が何故#2、#4、原因の曖昧さを理解していません。そのため、型の型へのキャスト演算子と型への参照が宣言されていると、ダイレクトリストの初期化によって、暗黙のキャストの参照が曖昧になるのはなぜですか?
'int&a(foo {})'は直接初期化です。 'int&b {foo {}}'は直接* list *の初期化です。彼らは同じことではありません。 –