From: Giovanni Bajo Date: Fri, 16 Jan 2004 12:29:40 +0000 (+0000) Subject: re PR c++/13407 (Confusing error message from extraneous typename) X-Git-Tag: releases/gcc-3.4.0~916 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1ed53ef30cdbfafa4d25d57e5f75b5aef84657b0;p=thirdparty%2Fgcc.git re PR c++/13407 (Confusing error message from extraneous typename) PR c++/13407 * parser.c (cp_parser_base_specifier): Check for an invalid keyword 'typename' and emit an user-friendly error message. From-SVN: r75969 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f78d9af6f230..a902c255768c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-01-15 Giovanni Bajo + + PR c++/13407 + * parser.c (cp_parser_base_specifier): Check for an invalid + keyword `typename' and emit an user-friendly error message. + 2004-01-15 Geoffrey Keating PR pch/13361 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 6a78264421a8..481864b10955 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -12690,6 +12690,18 @@ cp_parser_base_specifier (cp_parser* parser) break; } } + /* It is not uncommon to see programs mechanically, errouneously, use + the 'typename' keyword to denote (dependent) qualified types + as base classes. */ + if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME)) + { + if (!processing_template_decl) + error ("keyword `typename' not allowed outside of templates"); + else + error ("keyword `typename' not allowed in this context " + "(the base class is implicitly a type)"); + cp_lexer_consume_token (parser->lexer); + } /* Look for the optional `::' operator. */ cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);