Message ID | aab3c5f0904dd90157f3f33892a74bfe@imap.force9.net |
---|---|
State | New |
Headers | show |
On 09/23/2013 01:53 AM, Adam Butcher wrote: > + if (member_p) > + decl = finish_fully_implicit_template (parser, decl); > + else > + finish_fully_implicit_template (parser, /*member_decl_opt=*/0); Why don't we want to return the template for the non-member case? Jason
On 23.09.2013 19:03, Jason Merrill wrote: > On 09/23/2013 01:53 AM, Adam Butcher wrote: >> + if (member_p) >> + decl = finish_fully_implicit_template (parser, decl); >> + else >> + finish_fully_implicit_template (parser, /*member_decl_opt=*/0); > > Why don't we want to return the template for the non-member case? > If the decl is passed to finish_fully_implicit_template it is considered to be a member and the finished member returned. In the non-member case, nullptr is returned.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 82abf7c..f3133f3 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -16318,8 +16318,7 @@ cp_parser_init_declarator (cp_parser* parser, "a function-definition is not allowed here"); return error_mark_node; } - else - { + location_t func_brace_location = cp_lexer_peek_token (parser->lexer)->location; @@ -16357,9 +16356,6 @@ cp_parser_init_declarator (cp_parser* parser, return decl; } } - else if (parser->fully_implicit_function_template_p) - decl = finish_fully_implicit_template (parser, decl); - } /* [dcl.dcl] @@ -16581,6 +16577,15 @@ cp_parser_init_declarator (cp_parser* parser, if (!friend_p && pushed_scope) pop_scope (pushed_scope); + if (function_declarator_p (declarator) + && parser->fully_implicit_function_template_p) + { + if (member_p) + decl = finish_fully_implicit_template (parser, decl); + else + finish_fully_implicit_template (parser, /*member_decl_opt=*/0); + } + return decl; }