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

Во время работы с пакетами шаблонов шаблонов С++ 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)’" ошибка.

Является ли это недействительным С++ или g++ еще не реализует этот тип использования непараллельных шаблонов шаблонов?

Ответ 1

Он действителен, и это, по-видимому, является ошибкой реализации gcc variadic templates. Я немного искал на странице gcc bugzilla и не нашел никаких сообщений об этой проблеме.

Ответ 2

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

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