Вопрос поднялся в контексте этого ответа.
Рассмотрим пример:
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;
}
Я не понимаю, почему # 2 и # 4 вызывают неоднозначность, а # 1 и # 3 - нет. Поэтому возникает вопрос: почему инициализация прямого списка вызывает неоднозначность для неявного приведения к ссылке, если объявлены операторы литья к типу и ссылка на тип?