gcc vs clang:将捕获的参数包扩展两次

时间:2019-06-02 10:49:21

标签: c++ gcc lambda clang

请考虑以下代码段:

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错误,但是我想从比我更有经验的人那里得到一些确认,因为我已经看到了可变参数捕获here在叮当声中的(不同)错误行为。

1 个答案:

答案 0 :(得分:1)

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

GCC 8编译代码fine