Commit 9ca6556e by Dodji Seketeli Committed by Dodji Seketeli

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
parent 1c2bbb16
2011-03-08 Dodji Seketeli <dodji@redhat.com>
* name-lookup.c (binding_to_template_parms_of_scope_p): Only
consider scopes of primary template definitions. Adjust comments.
2011-03-07 Jason Merrill <jason@redhat.com> 2011-03-07 Jason Merrill <jason@redhat.com>
PR c++/48003 PR c++/48003
......
...@@ -4205,8 +4205,13 @@ qualified_lookup_using_namespace (tree name, tree scope, ...@@ -4205,8 +4205,13 @@ qualified_lookup_using_namespace (tree name, tree scope,
} }
/* Subroutine of outer_binding. /* 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 static bool
binding_to_template_parms_of_scope_p (cxx_binding *binding, binding_to_template_parms_of_scope_p (cxx_binding *binding,
...@@ -4222,6 +4227,8 @@ 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 return (scope
&& scope->this_entity && scope->this_entity
&& get_template_info (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, && parameter_of_template_p (binding_value,
TI_TEMPLATE (get_template_info \ TI_TEMPLATE (get_template_info \
(scope->this_entity)))); (scope->this_entity))));
......
2011-03-08 Dodji Seketeli <dodji@redhat.com>
* g++.dg/lookup/template3.C: New test.
2011-03-08 Kai Tietz <ktietz@redhat.com> 2011-03-08 Kai Tietz <ktietz@redhat.com>
* g++.dg/tree-ssa/pr21082.C: Use __INTPTR_TYPE__ instead of * g++.dg/tree-ssa/pr21082.C: Use __INTPTR_TYPE__ instead of
......
// Origin PR c++/47957
// { dg-do compile }
struct S
{
int m;
S()
: m(0)
{
}
};
struct Base
{
typedef S T;
};
template<class T>
struct Derived : public Base
{
int
foo()
{
T a; // This is Base::T, not the template parameter.
return a.m;
}
};
int
main()
{
Derived<char> d;
return d.foo();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment