It seems to me that there's a discrepancy in handling explicit default constructors. Based on my tests, this works:
struct X {explicit X() {}};
void f(X) {}
int main()
{
f({});
}
However, if the explicit constructor is defaulted, gcc accepts the code:
struct X {explicit X() = default;};
void f(X) {}
int main()
{
f({});
}
