Variadic templates for lambda expressions

前端 未结 2 1081
渐次进展
渐次进展 2021-01-04 18:54

What\'s the correct way to do this with g++:

template < typename F >
void g (F f);

template < typename ... A >
void h (A ... a);

template <          


        
2条回答
  •  [愿得一人]
    2021-01-04 19:13

    I think you need to expand the pack a in the capture list as well, like this:

    template < typename ... A >
    void f (A ... a) {
      g ([&, a...] () { h (a...); }); 
    }
    

    Here is the relevant text from the C++0x Final Committee Draft, section 5.1.2.23:

    A capture followed by an ellipsis is a pack expansion (14.5.3). [ Example:

    template void f(Args... args) {
        auto lm = [&, args...] { return g(args...); }; lm();
    }
    

    — end example ]

提交回复
热议问题