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

--- Comment #16 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-13 branch has been updated by Marek Polacek
<mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:08f4496aa619f9b0e8dbb459452dd96edb870236

commit r13-8146-g08f4496aa619f9b0e8dbb459452dd96edb870236
Author: Marek Polacek <pola...@redhat.com>
Date:   Thu May 25 18:54:18 2023 -0400

    c++: wrong error with static constexpr var in tmpl [PR109876]

    Since r8-509, we'll no longer create a static temporary var for
    the initializer '{ 1, 2 }' for num in the attached test because
    the code in finish_compound_literal is now guarded by
    '&& fcl_context == fcl_c99' but it's fcl_functional here.  This
    causes us to reject num as non-constant when evaluating it in
    a template.

    Jason's idea was to treat num as value-dependent even though it
    actually isn't.  This patch implements that suggestion.

    We weren't marking objects whose type is an empty class type
    constant.  This patch changes that so that v_d_e_p doesn't need
    to check is_really_empty_class.

    Co-authored-by: Jason Merrill <ja...@redhat.com>

            PR c++/109876

    gcc/cp/ChangeLog:

            * decl.cc (cp_finish_decl): Set TREE_CONSTANT when initializing
            an object of empty class type.
            * pt.cc (value_dependent_expression_p) <case VAR_DECL>: Treat a
            constexpr-declared non-constant variable as value-dependent.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/constexpr-template12.C: New test.
            * g++.dg/cpp1z/constexpr-template1.C: New test.
            * g++.dg/cpp1z/constexpr-template2.C: New test.

    (cherry picked from commit b5138df96a93d3b5070c88b8617eabd38cb24ab6)

Reply via email to