This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

warn about deprecated access declarations


Hi,

According to § 11.3/1 from c++98, access delarations are deprecated:

The access of a member of a base class can be changed in the derived
class by mentioning its qualified-id in the derived class declaration.
Such mention is called an access declaration. The effect of an access
declaration qualified-id; is defined to be equivalent to the
declaration usingqualified-id; [Footnote: Access declarations are
deprecated; member using-declarations (7.3.3) provide a better means
of doing the same things. In earlier versions of the C++ language,
access declarations were more limited; they were generalized and made
equivalent to using-declarations - end footnote]

Consequently, I propose to deprecate them with a warning, as clang already does.
So that you get a warning for the following code:

struct A { int i; };
struct B : A
{
  A::i; // <- warning here
};

warning: access declarations are deprecated; employ using declarations
instead [-Wdeprecated]

The warning is trivial to avoid, just add the keyword 'using' before
the access declaration.
Before adjusting the whole testsuite, I would like to know if there is
agreement to do it at stage 3.
The patch is really simple: (it does not include yet testsuite adjustements)

Index: gcc/cp/parser.c
===================================================================
--- gcc/cp/parser.c	(revision 182209)
+++ gcc/cp/parser.c	(working copy)
@@ -18900,7 +18900,11 @@ cp_parser_member_declaration (cp_parser*
   parser->colon_corrects_to_scope_p = false;

   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
-    goto out;
+    {
+      warning (OPT_Wdeprecated, "access declarations are deprecated; "
+	       "employ using declarations instead");
+      goto out;
+    }

   /* Parse the decl-specifier-seq.  */
   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);

-- 
Fabien


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]