C++ Logo

std-proposals

Advanced search

Re: Fixing some initialization gotchas

From: Maciej Cencora <m.cencora_at_[hidden]>
Date: Fri, 23 Aug 2019 17:46:27 +0200
pt., 23 sie 2019 o 17:35 Ville Voutilainen <ville.voutilainen_at_[hidden]>
napisaƂ(a):

> On Fri, 23 Aug 2019 at 18:21, Maciej Cencora <m.cencora_at_[hidden]> 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).

Received on 2019-08-23 10:48:42