我正在尝试在内部 lambda 中捕获可变参数 lambda 并在那里使用它。例如,考虑以下代码:
int main () {
auto first = [&] (auto&&... one) {
auto second = [&] (auto&&... two) {
return ((one * two) + ...);
};
return second(one...);
};
return first(5);
}
这适用于 gcc9,但适用于 clang8 ( https://godbolt.org/z/i2K9cK )。
使代码编译的一种方法是显式捕获[&one...]
,但我想知道这是否是 clang 中的错误。
也很有趣:将 return 语句更改one
为直接展开的内容(在与 组合之前two
),这会再次编译:
return (((one * ...) * two) + ...);
我找到了这个相关的帖子,但是那里声明的错误似乎已在 clang8 中修复。