@@ -20406,13 +20406,11 @@ cp_parser_member_declaration (cp_parser* parser)
&decl_specifiers,
declarator,
attributes);
+ if (parser->fully_implicit_function_template_p)
+ decl = finish_fully_implicit_template (parser, decl);
/* If the member was not a friend, declare it here. */
if (!friend_p)
- {
- if (parser->fully_implicit_function_template_p)
- decl = finish_fully_implicit_template (parser, decl);
- finish_member_declaration (decl);
- }
+ finish_member_declaration (decl);
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
/* If the next token is a semicolon, consume it. */
new file mode 100644
@@ -0,0 +1,21 @@
+// PR c++/60064
+// { dg-do compile }
+// { dg-options "-std=c++1y" }
+
+class A
+{
+ int m;
+ friend void foo (auto) {}
+ friend void foo2 (auto);
+};
+
+void foo2 (auto i)
+{
+ A a;
+ a.m = i;
+}
+
+int main ()
+{
+ foo2 (7);
+}