Ответ 1
При разрешении перегрузки, когда рассматривается неявная последовательность преобразования в инициализации списка,
(акцент мой)
В противном случае, если тип параметра не является классом, а в списке инициализаций имеется один элемент, неявная последовательность преобразования - это та, которая требуется для преобразования элемента в тип параметра
Для f({42});
, для f(int)
неявная последовательность преобразования является той, которая преобразует элемент (т.е. 42
) в int
, что является точным совпадением; для f(std::vector<int>)
требуется пользовательское преобразование (преобразование std::initializer_list<int>
в std::vector<int>
), тогда это хуже.
PS: если бит-инициализатор содержит более одного элемента, такого как {42, 42}
, будет выбран f(std::vector<int>)
.