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

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

https://gcc.gnu.org/g:b5138df96a93d3b5070c88b8617eabd38cb24ab6

commit r14-2527-gb5138df96a93d3b5070c88b8617eabd38cb24ab6
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.

Reply via email to