我在這裏看到了一些與在lambda中捕獲可變參數的gcc錯誤有關的問題。例如參見:Does lambda capture support variadic template arguments或Compiler bug, or non standard code? - Variadic template capture in lambda。我有什麼,我試圖做替代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中工作
它不會幫你很多,但代碼與叮噹3.4(中繼)。 – Ali
我剛剛用g ++ 4.9快照測試過,它也在那裏工作。 –
這是一個好消息,但不幸的是,如果你需要使用gcc 4.8 – Ali