Просто использовать эллипсы. В соответствии с пунктом 5.1.2/23 из C++ 11 Стандарт на:
A capture followed by an ellipsis is a pack expansion (14.5.3). [ Example:
template<class... Args>
void f(Args... args) {
auto lm = [&, args...] { return g(args...); };
lm();
}
—end example ]
Примечание: Интересно, что GCC отказывается компилировать это (см live example):
template <class T, class... A>
void foo(T&& func, A&&... args) {
std::function<void()> task([func, args...]() {
//...
});
}
Но учитывая выше пример из Стандарта, это определенно проблема компилятора.
Удивительно, вы держите в памяти весь стандарт или просто смотрите быстро? – maverik
@maverik: Конечно, я быстро посмотрел;) –
Похож на эту ошибку gcc: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41933 (ваша цитата была довольно поздним дополнением к стандарту) –