On Fri, Apr 20, 2018 at 1:46 PM, Paolo Carlini <paolo.carl...@oracle.com> wrote: > Hi, > > in this error-recovery regression, after sensible diagnostic about "two or > more data types in declaration..." we get confused, we issue a cryptic - > but useful hint to somebody working on the present bug ;) - "template > definition of non-template" error and we finally crash. I think the issue > here is that we want to use abort_fully_implicit_template as part of the > error recovery done by cp_parser_parameter_declaration_list, when the loop > is exited early after a cp_parser_parameter_declaration internally called > synthesize_implicit_template_parm. Indeed, if we do that we get the same > error recovery behavior we get for the same testcase modified to not use an > auto parameter (likewise for related testcases): > > struct a { > void b() {} > void c(auto = [] { > if (a a(int int){}) > ; > }) {} > };
Hmm, the erroneous declaration is within the lambda body, so messing with whether c is a template seems wrong. Jason