https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99546

--- Comment #22 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Jason Merrill <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:25992d8daff60726a247ec7850d540aed5335639

commit r15-9212-g25992d8daff60726a247ec7850d540aed5335639
Author: Jason Merrill <ja...@redhat.com>
Date:   Wed Jan 29 05:15:00 2025 -0500

    c++: lambda in requires outside template [PR99546]

    Since r10-7441 we set processing_template_decl in a requires-expression so
    that we can use tsubst_expr to evaluate the requirements, but that confuses
    lambdas terribly; begin_lambda_type silently returns error_mark_node and we
    continue into other failures.  This patch clears processing_template_decl
    again while we're defining the closure and op() function, so it only
remains
    set while parsing the introducer (i.e. any init-captures) and building the
    resulting object.  This properly avoids trying to create another lambda in
    tsubst_lambda_expr.

            PR c++/99546
            PR c++/113925
            PR c++/106976
            PR c++/109961
            PR c++/117336

    gcc/cp/ChangeLog:

            * lambda.cc (build_lambda_object): Handle fake
            requires-expr processing_template_decl.
            * parser.cc (cp_parser_lambda_expression): Likewise.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/lambda-requires2.C: New test.
            * g++.dg/cpp2a/lambda-requires3.C: New test.
            * g++.dg/cpp2a/lambda-requires4.C: New test.
            * g++.dg/cpp2a/lambda-requires5.C: New test.

Reply via email to