В этом коде:
#include <iostream>
#include <initializer_list>
#include <string>
struct A
{
A() { std::cout << "2" << std::endl; }
A(int a) { std::cout << "0" << std::endl; }
A(std::initializer_list<std::string> s) { std::cout << "3" << std::endl; }
A(std::initializer_list<int> l) { std::cout << "1" << std::endl; }
};
int main()
{
A a1{{}};
}
Почему он вызывает конструкцию конструктора std::initializer_list<int>
?
Он будет генерировать ошибку компиляции неоднозначности, если мы определим, например, конструктор с std::initializer_list<double>
. Каковы правила такого построения и почему это так специфично в отношении std::initializer_list
с номером в качестве аргумента шаблона?