-
- cp_warning ("`%s %T' declares a new type at namespace scope;\n\
-to refer to the inherited type, say `%s %T::%T'%s",
- tag_name (tag_code), name, tag_name (tag_code),
- constructor_name (current_class_type), TYPE_IDENTIFIER (t),
- (!explained ? "\n\
-(names from dependent base classes are not visible to unqualified name lookup)"
- : ""));
-
- explained = 1;
+ tree shadowed;
+
+ cp_warning ("`%s %T' declares a new type at namespace scope",
+ tag_name (tag_code), name);
+ if (!explained++)
+ cp_warning (" names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'%s",
+ tag_name (tag_code),
+ constructor_name (current_class_type),
+ TYPE_IDENTIFIER (t));
+
+ /* We need to remove the class scope binding for the
+ TYPENAME_TYPE as otherwise poplevel_class gets confused. */
+ for (shadowed = b->class_shadowed;
+ shadowed;
+ shadowed = TREE_CHAIN (shadowed))
+ if (TREE_TYPE (shadowed) == TYPE_NAME (t))
+ {
+ TREE_PURPOSE (shadowed) = NULL_TREE;
+ break;
+ }