我在这里看到了一些关于gcc捕获lambda可变参数的bug的问题。例如: Does lambda capture support variadic template arguments 或者 Compiler bug, or non standard code? - Variadic template capture in lambda。我有一个人为制造的例子,来说明我的尝试。
#include <iostream>
#include <functional>
class TestVariadicLambda {
public:
template<typename... Args>
std::function<void()> getFunc(Args... args) {
return [=]{ printArgs(args...); };
}
template<typename T, typename... Args>
void printArgs(T value, Args... args) {
std::cout << value << ", ";
printArgs(args...);
}
void printArgs() {std::cout << "\n";}
};
在gcc 4.8.2中,我遇到了以下错误:
../src/TestVariadicLambda.h: In lambda function:
../src/TestVariadicLambda.h:9:25: error: parameter packs not expanded with ‘...’:
return [=]{ printArgs(args...); };
^
../src/TestVariadicLambda.h:9:25: note: ‘args’
../src/TestVariadicLambda.h:9:29: error: expansion pattern ‘args’ contains no argument packs
return [=]{ printArgs(args...); };
^
我的问题是如何解决这个问题,因为它在gcc4.8中无法工作。