pt., 23 sie 2019 o 17:35 Ville Voutilainen <> napisał(a):
On Fri, 23 Aug 2019 at 18:21, Maciej Cencora <> wrote:
> I cannot pass multiple elements in that form now, but it was possible before in C++11.
> It is a simplification, because it avoids ambiguities, surprises, and removes corner cases.
> Currently this one compiles:
> auto x1 = { 1 };
> auto x2 = { 1, 1 };
> auto x3{ 1 };
> auto x4{ 1, 1 };
> Currently only x1 and x2 has same type, x4 does not compile, x1 and x2 compiles only if you include initializer_list header.
> And x1 type is different then x3.
> This is complete bonkers!

Indeed it is. But in order to get x3, some parties insisted on keeping
x1/x2 working as they were, so that's the compromise we have.

A compromise that leads to even more problems.
> With my proposal the only allow auto declaration would be in following form:
> auto x = y;
> which is unambiguous, has no corner cases, and works just as right now.

Yeah, and then T a{x}; works but auto a{x} doesn't, so yeah, you do
have corner cases.

Fine, lets call it a corner case, but it is still way more saner and simpler to remember, than what we have now (and if you will forget that limitation, the compiler will immediately remind you).