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

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

https://gcc.gnu.org/g:982629bea416df976686467f235e09cb1a5531cc

commit r13-4761-g982629bea416df976686467f235e09cb1a5531cc
Author: Patrick Palka <ppa...@redhat.com>
Date:   Sat Dec 17 11:24:44 2022 -0500

    c++: constantness of non-dependent NTTP argument [PR107437]

    Here we're rejecting the use of the lambda capture of 't' (of empty
    type) as a template argument ultimately because convert_nontype_argument
    checks constantness using is_constant_expression, which returns false
    for lambda captures since want_rval=false.  But in this case I believe
    an lvalue-to-rvalue conversion of the argument is implied, so we should
    be using is_rvalue_constant_expression instead (which would return true
    here).

    However, it doesn't seem necessary to consider constantness at all
    when deciding whether to instantiate a non-dependent argument in
    convert_nontype_argument.  So this patch gets rid of the problematic
    constantness test altogether, which incidentally also fixes the similar
    dg-ice'd testcase from PR87765.  This is in line with a similar
    change we made to finish_decltype_type in r12-7564-gec0f53a3a542e7.

            PR c++/107437
            PR c++/87765

    gcc/cp/ChangeLog:

            * pt.cc (convert_nontype_argument): Relax is_nondep_const_expr
            test to !inst_dep_expr_p.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp1y/lambda-generic-107437.C: New test.
            * g++.dg/cpp1z/constexpr-lambda26.C: Remove dg-ice.

Reply via email to