From 44b29b01d6fb65f11f39a096d5a4b97dbd4256da Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 7 Nov 2011 22:52:23 +0000 Subject: [PATCH] PR c++/50870 * pt.c (tsubst_copy): Handle NAMESPACE_DECL. (tsubst_copy_and_build) [COMPONENT_REF]: Handle a still-dependent object. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181131 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/pt.c | 7 ++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/decltype35.C | 15 +++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/decltype35.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f75fcc2..4945fd9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2011-11-07 Jason Merrill + + PR c++/50870 + * pt.c (tsubst_copy): Handle NAMESPACE_DECL. + (tsubst_copy_and_build) [COMPONENT_REF]: Handle a still-dependent + object. + 2011-11-07 Paolo Carlini * pt.c (tsubst_copy_and_build): Fix qualified_name_lookup_error diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index c4f4a94..53a5358 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -12010,6 +12010,9 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl) mark_used (t); return t; + case NAMESPACE_DECL: + return t; + case OVERLOAD: /* An OVERLOAD will always be a non-dependent overload set; an overload set from function scope will just be represented with an @@ -13871,7 +13874,9 @@ tsubst_copy_and_build (tree t, if (member == error_mark_node) return error_mark_node; - if (object_type && !CLASS_TYPE_P (object_type)) + if (type_dependent_expression_p (object)) + /* We can't do much here. */; + else if (!CLASS_TYPE_P (object_type)) { if (SCALAR_TYPE_P (object_type)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1560c27..e2eccc5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-11-07 Jason Merrill + + PR c++/50870 + * g++.dg/cpp0x/decltype35.C: New. + 2011-11-07 Dodji Seketeli Support C++11 alias-declaration diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype35.C b/gcc/testsuite/g++.dg/cpp0x/decltype35.C new file mode 100644 index 0000000..d1fd476 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype35.C @@ -0,0 +1,15 @@ +// PR c++/50870 +// { dg-options -std=c++0x } + +template + struct impl + { + template static T create(); + }; + +template ::template create() + -> impl::template create())> +struct tester { }; + +tester*, int, float> ti; -- 2.7.4