Учитывая класс A
с двумя конструкторами, взяв initializer_list<int>
и initializer_list<initializer_list<int>>
соответственно, тогда
A v{5,6};
вызывает первое, а
A v{{5,6}};
вызывает последнее, как и ожидалось. (clang3.3, по-видимому, gcc ведет себя по-разному, см. ответы. Что требует стандарт?)
Но если я удалю второй конструктор, то A v{{5,6}};
все еще компилируется и использует первый конструктор. Я этого не ожидал.
Я думал, что A v{5,6}
будет единственным способом доступа к конструктору initializer_list<int>
.
(я обнаружил это во время игры с std::vector
и этим вопросом, который я задал Reddit, но я создал свой собственный класс A, чтобы быть уверенным, t просто причуда интерфейса для std::vector
.)