C++ Logo

std-proposals

Advanced search

Re: Fixing some initialization gotchas

From: Ville Voutilainen <ville.voutilainen_at_[hidden]>
Date: Fri, 23 Aug 2019 18:35:47 +0300
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.

>
> 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.

Received on 2019-08-23 10:38:01