[C++ Patch] PR 51911 V2 ("G++ accepts new auto { list }")
Paolo Carlini
paolo.carlini@oracle.com
Sat Sep 12 08:29:00 GMT 2015
Hi,
On 09/11/2015 10:05 PM, Jason Merrill wrote:
> On 09/11/2015 03:11 PM, Paolo Carlini wrote:
>> this is a slightly reworked (simplified) version of a patch I sent a
>> while ago. The issue is that we are not enforcing at all 5.3.4/2 in the
>> parser, thus we end up rejecting the first test below with a misleading
>> error message talking about list-initialization (and a wrong location),
>> because we diagnose it too late like 'auto foo{3, 4, 5};', and simply
>> accepting the second. Tested x86_64-linux.
>
> Hmm, I think we really ought to accept
>
> new auto { 2 }
>
> to be consistent with all the other recent changes to treat { elt }
> like (elt); this seems like a piece that was missed from DR 1467. Do
> you agree, Ville?
I see, while waiting for Ville, maybe I can ask what we should do in
case he agrees. The error message we currently emit for new auto { 3, 4,
5 } seems suboptimal in various ways:
51911.C:6:31: error: direct-list-initialization of âautoâ requires
exactly one element [-fpermissive]
auto foo = new auto { 3, 4, 5 };
^
51911.C:6:31: note: for deduction to âstd::initializer_listâ, use
copy-list-initialization (i.e. add â=â before the â{â)
the caret is under the last '}' and the note doesn't make much sense (of
course do_auto_deduction doesn't know we are handling a new). Thus I
wonder if we should anyway have something in the parser and with which
exact wording (just tweak what I sent earlier replacing 'exactly one
parenthesized expression' with 'exactly one element'?!?)
Thanks,
Paolo.
More information about the Gcc-patches
mailing list