From: jason Date: Tue, 15 Mar 2016 19:21:44 +0000 (+0000) Subject: PR c++/70141 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=54f26019562bbe3dd556c4c4b6d2983a11bb95bf;p=thirdparty%2Fgcc.git PR c++/70141 * pt.c (for_each_template_parm_r): Always walk into TYPENAME_TYPE. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234228 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 949d25da2477..9ace01eddbaa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2016-03-15 Jason Merrill + + PR c++/70141 + * pt.c (for_each_template_parm_r): Always walk into TYPENAME_TYPE. + 2016-03-14 Casey Carter Jason Merrill diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 9766668dfcf5..724d6e994413 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8851,8 +8851,9 @@ for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d) break; case TYPENAME_TYPE: - if (!fn) - WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t)); + /* A template-id in a TYPENAME_TYPE might be a deduced context after + partial instantiation. */ + WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t)); break; case CONSTRUCTOR: diff --git a/gcc/testsuite/g++.dg/template/partial-specialization4.C b/gcc/testsuite/g++.dg/template/partial-specialization4.C new file mode 100644 index 000000000000..1f2acedf47e1 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/partial-specialization4.C @@ -0,0 +1,26 @@ +// PR c++/70141 + +template +struct outer +{ + template + struct inner + { + + }; +}; + + +template +struct is_inner_for +{ + template + struct predicate; + + template + struct predicate::template inner > + { + }; +}; + +is_inner_for::predicate::inner > p;