пакеты параметров не расширены с помощью «...» - еще одна ошибка шаблона с gcc?
Обработка вариационных шаблонов в gcc хорошо известна как неоднозначная (см., например,этот а такжеэтот), но мне интересно, известна ли следующая ошибка (я не могу найти ее в bugzilla) или это действительно ошибка. По сути, gcc (4.8.1) не может развернуть пакет параметров внутри лямбды:
#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)...); });
}
это вызывает (даже без какой-либо конкретизации)
error: parameter packs not expanded with ‘...’:
{ f(t,std::forward<X>(x)...); });
^
есть идеи как этого избежать? (примечание: хорошо с icpc 14.0.2 и clang 3.4) Или gcc корректен, а clang & icpc неправильный?
редактировать Обратите внимание, что проблема заключается в лямбда-выражениях, поскольку они также не компилируются:
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);
}
с отчетом «об ошибке» в определении лямбды.