Commit 1ed53ef3 by Giovanni Bajo

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
parent e24e7211
2004-01-15 Giovanni Bajo <giovannibajo@gcc.gnu.org>
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 <geoffk@apple.com> 2004-01-15 Geoffrey Keating <geoffk@apple.com>
PR pch/13361 PR pch/13361
......
...@@ -12690,6 +12690,18 @@ cp_parser_base_specifier (cp_parser* parser) ...@@ -12690,6 +12690,18 @@ cp_parser_base_specifier (cp_parser* parser)
break; 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. */ /* Look for the optional `::' operator. */
cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false); cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment