c++ - 如果对象没有复制构造函数,则 lambda 捕获失败(在 MSVC 上)

标签 c++ c++17 language-lawyer

Code to reproduce :

struct S
{
    S();
    S(S const&) = delete;
};

auto x = [s = S()]{};
看起来 MSVC 在构建 lambda 时不适用(在 C++17 中是强制性的?)复制省略。这打破了我的一些代码......
VC的行为是否违反标准?

最佳答案

根据“语言律师”的评论:这是一个 known bug在已在 VS19 v16.2 和 VS17 v15.8 中修复的 MSVC 中。不幸的是(截至目前)修复仅适用于 /std:c++latest .

关于c++ - 如果对象没有复制构造函数,则 lambda 捕获失败(在 MSVC 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62882877/

相关文章:

c++ - 在 (Neo)vim 中调试 C++

c - 函数声明器中的参数声明是否具有函数原型(prototype)范围?

c++ - Friend 模板函数类内定义

c++ - 我应该如何命名基于 linux 的 C++ 库?

python - 如何在 python 中的 PyArrow 和 C++ 中的 Arrow 之间进行接口(interface)时将 PyArrow 表转换为 Arrow 表

c++ - 如何将可变参数从一个模板传递到另一个模板

c++ - 模板特化静态初始化 icc+vc vs gcc+clang

c++ - 对象数组作为 C++ 中函数错误的参数

c++ - 在 C++ 中再次运行时,rand() 不会更改值

c++ - 静态 constexpr 成员的 undefined reference 错误