Рассмотрим следующий фрагмент кода:
#include <iostream>
struct A {
A() {}
A(const A&) {}
};
struct B {
B(const A&) {}
};
void f(const A&) { std::cout << "A" << std::endl; }
void f(const B&) { std::cout << "B" << std::endl; }
int main() {
A a;
f( {a} ); // A
f( {{a}} ); // ambiguous
f( {{{a}}} ); // B
f({{{{a}}}}); // no matching function
}
Почему каждый вызов фабрикует соответствующий вывод? Как количество фигурных скобок влияет на равномерную инициализацию? И как на это влияет решимость?