一个参数包可以隐藏在C 11 lambdas内吗?

有没有人知道以下隐含的“ts”捕获形式是否正确:

template<class ... Ts> void bar(Ts ... ts) { }

template<class ... Ts> int foo(Ts ... ts) {
    auto L = [=] () {
       bar(ts...);
    };
    L();
    return 0;
}
int g = foo(1, 2, 3);

这个标准是否清楚地表明这不应该是很好的形成的?

最佳答案
14.5.3 / 6:

The instantiation of a pack expansion that is not a sizeof... expression produces a list E1, E2, …, EN , where
N is the number of elements in the pack expansion parameters. Each Ei is generated by instantiating the pattern and replacing each pack expansion parameter with its ith element. All of the Ei become elements in the enclosing list.

无论您是否允许明确捕获包(您可以使用[ts …]),一般的扩展规则将导致捕获列表中的每个元素。

转载注明原文:一个参数包可以隐藏在C 11 lambdas内吗? - 代码日志