Skip to content
Snippets Groups Projects
Commit 08f4496a authored by Marek Polacek's avatar Marek Polacek
Browse files

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: default avatarJason Merrill <jason@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 b5138df9)
parent 7308b4d5
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment