]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/86728 - C variadic generic lambda.
authorJason Merrill <jason@redhat.com>
Sat, 11 Aug 2018 11:02:22 +0000 (07:02 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sat, 11 Aug 2018 11:02:22 +0000 (07:02 -0400)
* parser.c (cp_parser_parameter_declaration): Don't turn 'auto' into
a pack if it's followed by a declarator-id.

From-SVN: r263486

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C [new file with mode: 0644]

index 4cc49d77cff56fabea9f3bdda22c2947e1cb2236..af9feea0bc613d5f965563e60c423389ff8ff5b9 100644 (file)
@@ -1,3 +1,9 @@
+2018-08-10  Jason Merrill  <jason@redhat.com>
+
+       PR c++/86728 - C variadic generic lambda.
+       * parser.c (cp_parser_parameter_declaration): Don't turn 'auto' into
+       a pack if it's followed by a declarator-id.
+
 2018-07-03  Jason Merrill  <jason@redhat.com>
 
        PR c++/86378 - functional cast in noexcept-specifier.
index 24ecf17b3b467fada5d9b57672fb139c9104746b..c2fa60b4aadb8430c1ae8507be20b7c1bd777ca0 100644 (file)
@@ -21343,7 +21343,8 @@ cp_parser_parameter_declaration (cp_parser *parser,
      parameter was introduced during cp_parser_parameter_declaration,
      change any implicit parameters introduced into packs.  */
   if (parser->implicit_template_parms
-      && (token->type == CPP_ELLIPSIS
+      && ((token->type == CPP_ELLIPSIS
+          && declarator_can_be_parameter_pack (declarator))
          || (declarator && declarator->parameter_pack_p)))
     {
       int latest_template_parm_idx = TREE_VEC_LENGTH
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C
new file mode 100644 (file)
index 0000000..e78677d
--- /dev/null
@@ -0,0 +1,4 @@
+// PR c++/86728
+// { dg-do compile { target c++14 } }
+
+auto c = [](auto x ...) { };