From: Jason Merrill Date: Fri, 15 Feb 2013 01:27:36 +0000 (-0500) Subject: re PR c++/55003 ([C++11] Member function pointer not working as constexpr initializer) X-Git-Tag: releases/gcc-4.8.0~422 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b24cd3d1f8ab5ad45bafdfd4af0f5805c4788ca2;p=thirdparty%2Fgcc.git re PR c++/55003 ([C++11] Member function pointer not working as constexpr initializer) PR c++/55003 * decl.c (cp_finish_decl): Force instantiation of an auto static data member. From-SVN: r196069 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1ecbb7b0b1a0..1e658e9b14c3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2013-02-14 Jason Merrill + PR c++/55003 + * decl.c (cp_finish_decl): Force instantiation of an + auto static data member. + PR c++/55220 * pt.c (unify): A pack expansion that is not the last template argument makes the entire template argument list non-deduced. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index eb6c490b9a57..3d63389e404b 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -6111,6 +6111,15 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, tree d_init; if (init == NULL_TREE) { + if (DECL_TEMPLATE_INSTANTIATION (decl) + && !DECL_TEMPLATE_INSTANTIATED (decl)) + { + /* init is null because we're deferring instantiating the + initializer until we need it. Well, we need it now. */ + instantiate_decl (decl, /*defer_ok*/true, /*expl*/false); + return; + } + error ("declaration of %q#D has no initializer", decl); TREE_TYPE (decl) = error_mark_node; return; diff --git a/gcc/testsuite/g++.dg/cpp0x/auto37.C b/gcc/testsuite/g++.dg/cpp0x/auto37.C new file mode 100644 index 000000000000..f4b29046d1d3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/auto37.C @@ -0,0 +1,14 @@ +// PR c++/55003 +// { dg-do compile { target c++11 } } + +template +struct A { + static const auto t + = (typename T::type)42; +}; + +struct X { + typedef int type; +}; + +A a;