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