There is a proposal for C++1z that implements new type deduction rules for brace initialization (N3922), and I guess gcc implemented them:
For direct list-initialization:
1. For a braced-init-list with only a single element, auto deduction will deduce from that entry;
2. For a braced-init-list with more than one element, auto deduction will be ill-formed.
[Example:
auto x1 = { 1, 2 }; // decltype(x1) is std::initializer_list<int>
auto x2 = { 1, 2.0 }; // error: cannot deduce element type
auto x3{ 1, 2 }; // error: not a single element
auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
auto x5{ 3 }; // decltype(x5) is int.
-- end example]
Here is the gcc patch concerning the new changes with regards to "Unicorn initialization."
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…