]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: generic lambda in default template argument [PR88313]
authorPatrick Palka <ppalka@redhat.com>
Mon, 29 Jul 2024 20:37:19 +0000 (16:37 -0400)
committerPatrick Palka <ppalka@redhat.com>
Mon, 29 Jul 2024 20:37:19 +0000 (16:37 -0400)
commit72a7ab891ae0061841c4eb641ef6ab7719bf0369
tree8bb480ed1c2e863675c69fec7c84428ff0efaade
parentdd2cc71e3898515a33970954d2bf7a4b67ea9790
c++: generic lambda in default template argument [PR88313]

Here we're rejecting the generic lambda inside the default template
argument ultimately because auto_is_implicit_function_template_parm_p
doesn't get set during parsing of the lambda's parameter list, due
to the !processing_template_parmlist restriction.  But when parsing a
lambda parameter list we should always set that flag regardless of where
the lambda appears.  This patch makes sure of this via a local lambda_p
flag.

PR c++/88313

gcc/cp/ChangeLog:

* parser.cc (cp_parser_lambda_declarator_opt): Pass
lambda_p=true to cp_parser_parameter_declaration_clause.
(cp_parser_direct_declarator): Pass lambda_p=false to
to cp_parser_parameter_declaration_clause.
(cp_parser_parameter_declaration_clause): Add bool lambda_p
parameter.  Consider lambda_p instead of current_class_type
when setting parser->auto_is_implicit_function_template_parm_p.
Don't consider processing_template_parmlist.
(cp_parser_requirement_parameter_list): Pass lambda_p=false
to cp_parser_parameter_declaration_clause.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/lambda-targ6.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/parser.cc
gcc/testsuite/g++.dg/cpp2a/lambda-targ6.C [new file with mode: 0644]