[C++11] Templates variadiques et fonctions lambdas
Bonjour,
J'aimerais capturer des paramètres template variadiques pour les utiliser dans une fonction lamba, mais g++ 4.5.2 sous Linux (Ubuntu 11.04) n'a pas l'air d'apprécier...
Code:
1 2 3 4 5 6 7 8 9 10
| template <typename InputIterator, typename ResultType, typename... Args>
void apply(InputIterator first, InputIterator last,
ResultType (std::iterator_traits<InputIterator>::value_type::*f)(Args...),
Args&&... args)
{
typedef typename std::iterator_traits<InputIterator>::value_type value_type;
std::for_each(first, last,
[&](value_type const& obj) { return (obj.*f)(std::forward<Args>(args)...); });
} |
me donne :
Code:
1 2
| toto.cpp:9:78: error: parameter packs not expanded with `...'
toto.cpp:9:78: note: `args' |
Par contre, code fonctionne compile bien :
Code:
1 2 3 4 5 6 7 8
| template <typename InputIterator, typename ResultType, typename... Args>
void apply(InputIterator first, InputIterator last,
ResultType (std::iterator_traits<InputIterator>::value_type::*f)(Args...),
Args&&... args)
{
for( ; first != last; ++first)
((*first).*f)(std::forward<Args>(args)...);
} |
J'imagine que le problème vient du fait que j'essaie de capturer des rvalue reference par référence.
Est-ce que c'est bien le cas ?
Y a-t-il un moyen de faire passer les paramètres template via la fonction lambda ?