pacotes de parâmetros não expandidos com ‘… '- outro bug de modelo variável com o gcc?
O tratamento de modelos variados do GCC é bem conhecido por ser irregular (veja, por exemplo,esta eesta), mas gostaria de saber se o bug a seguir já é conhecido (não consigo encontrá-lo no bugzilla) ou se é realmente um bug. Essencialmente, o gcc (4.8.1) falha ao expandir um pacote de parâmetros dentro de um lambda:
#include <vector>
#include <algorithm>
#include <type_traits>
template<typename T, typename F, typename... X>
void bar(std::vector<T> const&c, F const&f, X&&... x)
{
std:for_each(c.begin(),c.end(),[&](const T&t)
{ f(t,std::forward<X>(x)...); });
}
isso causa (mesmo sem nenhuma instanciação)
error: parameter packs not expanded with ‘...’:
{ f(t,std::forward<X>(x)...); });
^
alguma idéia de como evitar isso? (note: ok com icpc 14.0.2 e clang 3.4) Ou o gcc está correto afinal de contas e clang & icpc está errado?
editar Observe que o problema é o lambda, pois isso também não é compilado:
template<typename T, typename F, typename... X>
void bar(std::vector<T> const&c, F const&f, X&&... x)
{
auto func = [&](const T&t){ f(t,std::forward<X>(x)...); };
std:for_each(c.begin(),c.end(),func);
}
com o relatório "erro" na definição lambda.