This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
warn about deprecated access declarations
- From: Fabien Chêne <fabien dot chene at gmail dot com>
- To: gcc at gcc dot gnu dot org, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Jason Merrill <jason at redhat dot com>
- Date: Sun, 11 Dec 2011 23:22:55 +0100
- Subject: 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