From 9ca6556ebc27ab5f8dcd4cbb1354047aa2f81173 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Tue, 8 Mar 2011 15:38:30 +0000 Subject: re PR c++/47957 (Type mismatch when a class derived a same name with template parameter) PR c++/47957 gcc/cp/ * name-lookup.c (binding_to_template_parms_of_scope_p): Only consider scopes of primary template definitions. Adjust comments. gcc/testsuite/ * g++.dg/lookup/template3.C: New test. From-SVN: r170779 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/name-lookup.c | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'gcc/cp') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f18ce9c..df362b2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2011-03-08 Dodji Seketeli + + * name-lookup.c (binding_to_template_parms_of_scope_p): Only + consider scopes of primary template definitions. Adjust comments. + 2011-03-07 Jason Merrill PR c++/48003 diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 4117202..18e3441 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -4205,8 +4205,13 @@ qualified_lookup_using_namespace (tree name, tree scope, } /* Subroutine of outer_binding. - Returns TRUE if BINDING is a binding to a template parameter of SCOPE, - FALSE otherwise. */ + + Returns TRUE if BINDING is a binding to a template parameter of + SCOPE. In that case SCOPE is the scope of a primary template + parameter -- in the sense of G++, i.e, a template that has its own + template header. + + Returns FALSE otherwise. */ static bool binding_to_template_parms_of_scope_p (cxx_binding *binding, @@ -4222,6 +4227,8 @@ binding_to_template_parms_of_scope_p (cxx_binding *binding, return (scope && scope->this_entity && get_template_info (scope->this_entity) + && PRIMARY_TEMPLATE_P (TI_TEMPLATE + (get_template_info (scope->this_entity))) && parameter_of_template_p (binding_value, TI_TEMPLATE (get_template_info \ (scope->this_entity)))); -- cgit v1.1