【问题标题】:gcc vs clang: expanding a captured parameter pack twicegcc vs clang:两次扩展捕获的参数包
【发布时间】: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 已澄清这不是对上一个问题的转发。

标签: c++ gcc lambda clang


【解决方案1】:

这是 GCC 9 中的回归。它一直是 reported

GCC 8 编译代码fine

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2013-08-21
    • 2016-01-23
    • 2020-11-07
    • 2015-03-31
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多