initializer_list и разрешение перегрузки конструктора по умолчанию
#include <initializer_list>
#include <iostream>
using namespace std;
struct Y {};
struct X
{
X(initializer_list<Y>) { cout << "yay" << endl; }
explicit X() { cout << "boo" << endl; }
};
X f()
{
return {};
}
int main()
{
f();
return 0;
}
Это печатает "бу". Почему это не распечатывает "yay"?
Есть ли в любом случае дифференцировать следующие две конструкции:
X()
X{}
или же
return X();
return {};
или же
void g(const X&)
g(X())
g({})
Благодарю.