diff options
Diffstat (limited to 'gcc/cp/parser.c')
-rw-r--r-- | gcc/cp/parser.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 73fc6c7..4114aea 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -9720,6 +9720,7 @@ cp_parser_direct_declarator (cp_parser* parser, if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED) { tree params; + unsigned saved_num_template_parameter_lists; cp_parser_parse_tentatively (parser); @@ -9733,9 +9734,18 @@ cp_parser_direct_declarator (cp_parser* parser, parser->in_declarator_p = true; } + /* Inside the function parameter list, surrounding + template-parameter-lists do not apply. */ + saved_num_template_parameter_lists + = parser->num_template_parameter_lists; + parser->num_template_parameter_lists = 0; + /* Parse the parameter-declaration-clause. */ params = cp_parser_parameter_declaration_clause (parser); + parser->num_template_parameter_lists + = saved_num_template_parameter_lists; + /* If all went well, parse the cv-qualifier-seq and the exception-specification. */ if (cp_parser_parse_definitely (parser)) @@ -13436,6 +13446,7 @@ cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p) && !cp_parser_storage_class_specifier_opt (parser)) { tree type; + unsigned saved_num_template_parameter_lists; /* Names appearing in the type-specifier should be looked up in the scope of the class. */ @@ -13456,6 +13467,13 @@ cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p) } push_scope (type); } + + /* Inside the constructor parameter list, surrounding + template-parameter-lists do not apply. */ + saved_num_template_parameter_lists + = parser->num_template_parameter_lists; + parser->num_template_parameter_lists = 0; + /* Look for the type-specifier. */ cp_parser_type_specifier (parser, CP_PARSER_FLAGS_NONE, @@ -13463,6 +13481,10 @@ cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p) /*is_declarator=*/true, /*declares_class_or_enum=*/NULL, /*is_cv_qualifier=*/NULL); + + parser->num_template_parameter_lists + = saved_num_template_parameter_lists; + /* Leave the scope of the class. */ if (type) pop_scope (type); |