【发布时间】:2019-06-02 10:49:21
【问题描述】:
考虑这段代码sn-p:
int main () {
auto first = [&] (auto... one) {
auto faulty = [&] () {
[[maybe_unused]] auto i = (one + ...);
return (one + ...);
};
faulty();
};
first(1);
}
另见on godbolt。
似乎当我尝试在内部 lambda 内扩展隐式捕获的参数包 one 两次时,gcc 会抱怨,但 clang 不会。
请注意,当我像[&one...] 那样明确捕获时,gcc 不再抱怨了。
对我来说,这看起来像是一个 gcc 错误,但我希望得到比我更有经验的人的一些确认,因为我已经在 clang 中看到了(不同的)错误行为,带有可变参数捕获 here。
【问题讨论】:
-
这和你之前的问题stackoverflow.com/questions/56356708/…有什么不同?
-
1. gcc 这里报错,clang 之前报错 2. 出现在不同的场景 3. 编译器错误不同。唯一相同的是
[&one...]似乎修复了它:D -
我建议你链接到你之前的问题并解释差异,因为它们是相似的。否则看过你之前问题的人(比如我)可能会感到困惑。
-
我认为这些是完全不同的,但是好吧
-
为什么投反对票? OP 已澄清这不是对上一个问题的转发。