Parameter pack in non-last position in function formal parameter list?

Avi Kivity avi@cloudius-systems.com
Fri Jun 19 16:24:00 GMT 2015


Consider

   template <typename... X, typename Y>
   void f(X... x, Y y) {
   }


   int main(int ac, char** av) {
     f(1, 2, 3, 4);
     return 0;
   }

is this legal?

gcc complains:

./variadic-function-nonlast.cc: In function ‘int main(int, char**)’:
./variadic-function-nonlast.cc:9:15: error: no matching function for 
call to ‘f(int, int, int, int)’
    f(1, 2, 3, 4);
                ^
./variadic-function-nonlast.cc:4:6: note: candidate: template<class ... 
X, class Y> void f(X ..., Y)
  void f(X... x, Y y) {
       ^
./variadic-function-nonlast.cc:4:6: note:   template argument 
deduction/substitution failed:
./variadic-function-nonlast.cc:9:15: note:   candidate expects 1 
argument, 4 provided
    f(1, 2, 3, 4);
                ^

So it's not complaining that f() is illegal, yet it id not deducing X... 
as int, int, int.



More information about the Gcc-help mailing list