mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-15 13:01:06 +08:00
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
This commit is contained in:
parent
0710ccffc3
commit
4104f0f400
gcc
@ -1,3 +1,9 @@
|
||||
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.
|
||||
|
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
12
gcc/testsuite/g++.dg/lookup/name-clash4.C
Normal file
12
gcc/testsuite/g++.dg/lookup/name-clash4.C
Normal file
@ -0,0 +1,12 @@
|
||||
// { 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" }
|
Loading…
x
Reference in New Issue
Block a user