c++ - gcc 与 clang : expanding a captured parameter pack twice

标签 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 错误,但我想得到比我更有经验的人的一些确认,因为我已经在带有可变捕获的 clang 中看到(不同的)错误行为 here .

最佳答案

这是 GCC 9 中的回归。它已被 reported .

GCC 8 编译代码fine .

关于c++ - gcc 与 clang : expanding a captured parameter pack twice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56414328/

相关文章:

Java Lambda 循环推理

c++ - Windows API : Why does button hover effect gets jammed after a while?

c++ - cp1251 : encoding distortion when converting from char* to wchar_t*

C++11 隐式移动构造函数

c - GCC 与 MSVC 编译器

c++ - ld : library not found for -lgcc_ext. 10.5

c++ - 这是正确的 C++0x 代码吗?

c++ - 将 4 个套接字字节转换为一个 int

c++ - 如何抑制多个警告但不是所有警告都来自库?

c# - 通用表达式树,每个提供的属性都有 'OR' 子句