考虑以下代码片段:
int main () {
auto first = [&] (auto... one) {
auto faulty = [&] () {
[[maybe_unused]] auto i = (one + ...);
return (one + ...);
};
faulty();
};
first(1);
}
另请参阅Godbolt。
似乎当我尝试在内部 lambda 中将隐式捕获的参数包one
扩展两次时,gcc 抱怨,但 clang 没有。请注意,当我明确捕获时,就像[&one...]
一样,gcc 不再抱怨了。
对我来说,这看起来像一个 gcc 错误,但我希望得到比我更有经验的人的确认,因为我已经在这里看到了带有可变参数捕获的 clang 中的(不同的(错误行为。
这是
GCC 9中的回归。据报道。
GCC 8 可以很好地编译代码。