@@ -18917,8 +18917,10 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
here. */
if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
- && !is_friend && !processing_explicit_instantiation)
- warning (0, "declaration %qD does not declare anything", decl);
+ && !is_friend && is_declaration
+ && !processing_explicit_instantiation)
+ warning (OPT_Wredundant_decls,
+ "declaration %qD does not declare anything", decl);
type = TREE_TYPE (decl);
}
@@ -4,4 +4,3 @@
template <typename T> class A;
template <typename T> class A<T>::B; // { dg-error "declaration" "err" }
-// { dg-warning "declaration" "warn" { target *-*-* } .-1 }
@@ -1,5 +1,6 @@
// Check that the compiler warns about inner-style forward declarations in
// contexts where they're not actually illegal, but merely useless.
+// { dg-options "-Wredundant-decls" }
// Verify warnings for and within classes, and by extension, struct and union.
class C1;
@@ -70,7 +71,7 @@ template class TC6<int>::TC7; // Valid explicit instantiation, no warning
// Verify that friend declarations, also easy to confuse with forward
-// declrations, are similarly not warned about.
+// declarations, are similarly not warned about.
class C8 {
public:
class C9 { };
@@ -79,3 +80,10 @@ class C10 {
public:
friend class C8::C9; // Valid friend declaration, no warning
};
+
+#if __cplusplus >= 201103L
+// Verify that alias-declarations using an elaborated-type-specifier and
+// nested-name-specifier are not warned about (PR c++/66159).
+struct C11;
+using A1 = struct ::C11; // Valid alias-decl, no warning
+#endif
@@ -1,5 +1,6 @@
/* PR36999: Erroneous "does not declare anything" warnings. */
/* { dg-do compile } */
+/* { dg-options "-Wredundant-decls" } */
class C1 {
public: class C2 { };