[Bug c++/95020] requires expression always evaluates to true in the definition of template lambda defined within template function

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed May 13 20:40:55 GMT 2020


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

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:

https://gcc.gnu.org/g:7e52f8b1e03776575b92574252d9b6bbed9f1af4

commit r11-372-g7e52f8b1e03776575b92574252d9b6bbed9f1af4
Author: Patrick Palka <ppalka@redhat.com>
Date:   Wed May 13 16:40:10 2020 -0400

    c++: premature requires-expression folding [PR95020]

    In the testcase below we're prematurely folding away the
    requires-expression to 'true' after substituting in the function's
    template arguments, but before substituting in the lambda's deduced
    template arguments.

    This patch removes the uses_template_parms check when deciding in
    tsubst_requires_expr whether to keep around a new requires-expression.
    Regardless of whether the template arguments are dependent, there still
    might be more template parameters to later substitute in (as in the
    below testcase) and even if not, tsubst_expr doesn't perform full
    semantic processing unless !processing_template_decl, so we should still
    wait until then to fold away the requires-expression.

    gcc/cp/ChangeLog:

            PR c++/95020
            * constraint.c (tsubst_requires_expr): Produce a new
            requires-expression when processing_template_decl, even if
            template arguments are not dependent.

    gcc/testsuite/ChangeLog:

            PR c++/95020
            * g++/cpp2a/concepts-lambda7.C: New test.


More information about the Gcc-bugs mailing list