Commit 4104f0f4 by Kriang Lerdsuwanakij Committed by Kriang Lerdsuwanakij

re PR c++/18100 (template member with same name as class not rejected)

	PR c++/18100
	* decl.c (lookup_and_check_tag): Diagnose nested class with
	the same name as enclosing class.

	* g++.dg/lookup/name-clash4.C: New test.

From-SVN: r91866
parent 0710ccff
2004-12-08 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/18100
* decl.c (lookup_and_check_tag): Diagnose nested class with
the same name as enclosing class.
2004-12-08 Nathan Sidwell <nathan@codesourcery.com>
PR c++/18803
......
......@@ -9169,6 +9169,18 @@ lookup_and_check_tag (enum tag_types tag_code, tree name,
if (decl && TREE_CODE (decl) == TYPE_DECL)
{
/* Look for invalid nested type:
class C {
class C {};
}; */
if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
{
error ("%qD has the same name as the class in which it is "
"declared",
decl);
return error_mark_node;
}
/* Two cases we need to consider when deciding if a class
template is allowed as an elaborated type specifier:
1. It is a self reference to its own class.
......
2004-12-08 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/18100
* g++.dg/lookup/name-clash4.C: New test.
2004-12-08 Nathan Sidwell <nathan@codesourcery.com>
PR c++/18672
......
// { dg-do compile }
// Origin: Volker Reichelt <reichelt@gcc.gnu.org>
// PR c++/18100: Invalid nested type.
struct A
{
template<int> struct A {}; // { dg-error "same name" }
};
A::A<0> a; // { dg-error "not a template" }
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