12

在使用 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++ 还没有实现这种非类型模板参数包的使用?

4

2 回答 2

5

它是有效的,这似乎是 gcc 的可变参数模板实现中的一个错误。我在gcc bugzilla 页面上搜索了一下,没有找到任何关于这个问题的报告。

于 2014-01-28T20:49:03.000 回答
1

我想作为一种解决方法,您可以这样做:

template <size_t... Indices> void wrapper() {
    constexpr int x[] = {Indices...};
    testFunc(x[0], x[1]);
}
于 2014-01-28T23:35:26.567 回答