GCC vs CLANG:将捕获的参数包扩展两次

gcc vs clang: expanding a captured parameter pack twice

本文关键字:扩展 两次 包扩展 参数 CLANG vs GCC      更新时间:2023-10-16

考虑以下代码片段:

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 可以很好地编译代码。