【发布时间】:2012-12-25 14:36:47
【问题描述】:
有谁知道以下对“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);
标准是否在任何地方明确说明不应该形成良好的格式?
【问题讨论】:
-
我知道您可以显式捕获它们,但我还没有看到任何“无论您可以显式捕获什么,您都可以隐式捕获,反之亦然”的效果。
-
如果格式正确,相信会导致无限递归。 :-) 我不确定标准对此有何规定。我希望这是未定义的行为。 ;-) 如果是,这意味着解析该代码允许有任何结果,即使 lambda 中的 pack 表达式格式正确。 :-)
-
感谢无所不能 - 我修复了无限递归问题。
-
GC 4.7.3 好像不支持了。
标签: c++ c++11 lambda language-lawyer variadic-templates