Расширение набора параметров шаблона типа C ++ 11

При работе с пакетами параметров шаблона C ++ 11 я придумал следующий код:

#include <cstdio>

static void testFunc(int i1, int i2) {
printf("testFunc(%d, %d)\n", i1, i2);
}

template <size_t... Indices> void wrapper() {
testFunc(Indices...);
}

int main(int argc, char *argv[]) {
wrapper<1, 2>();
return 0;
}

Попытка скомпилировать это с g ++ 4.8.2 привела к
"too few arguments to function ‘void testFunc(int, int)’" ошибка.

Разве это не допустимый C ++ или g ++ просто еще не реализует такого рода нетипичное использование набора параметров шаблона?

12

Решение

Это допустимо, и это, похоже, ошибка в реализации вариационных шаблонов gcc. Я немного искал на Страница gcc bugzilla и не нашел никаких сообщений по этому вопросу.

5

Другие решения

Я думаю, что в качестве обходного пути вы можете сделать это:

template <size_t... Indices> void wrapper() {
constexpr int x[] = {Indices...};
testFunc(x[0], x[1]);
}
1

По вопросам рекламы [email protected]