... what about something this simple? Passes testing...

Thanks,
Paolo.

///////////////////////////
Index: cp/parser.c
===================================================================
--- cp/parser.c (revision 227600)
+++ cp/parser.c (working copy)
@@ -19626,11 +19626,12 @@ cp_parser_parameter_declaration (cp_parser *parser
       if (type && DECL_P (type))
         type = TREE_TYPE (type);
 
-      if (type
-         && TREE_CODE (type) != TYPE_PACK_EXPANSION
-         && declarator_can_be_parameter_pack (declarator)
-          && (template_parm_p || uses_parameter_packs (type)))
-        {
+      if (((type
+           && TREE_CODE (type) != TYPE_PACK_EXPANSION
+           && (template_parm_p || uses_parameter_packs (type)))
+          || (!type && template_parm_p))
+         && declarator_can_be_parameter_pack (declarator))
+       {
          /* Consume the `...'. */
          cp_lexer_consume_token (parser->lexer);
          maybe_warn_variadic_templates ();
Index: testsuite/g++.dg/cpp0x/variadic166.C
===================================================================
--- testsuite/g++.dg/cpp0x/variadic166.C        (revision 0)
+++ testsuite/g++.dg/cpp0x/variadic166.C        (working copy)
@@ -0,0 +1,14 @@
+// PR c++/67318
+// { dg-do compile { target c++11 } }
+
+template<signed...>
+struct MyStruct1;
+
+template<unsigned...>
+struct MyStruct2;
+
+template<short...>
+struct MyStruct3;
+
+template<long...>
+struct MyStruct4;

Reply via email to