【发布时间】:2019-09-26 13:10:53
【问题描述】:
警告 C4626 阻止我们从 std:c++17 迁移到 std:c++latest。它从 19.22(不是 19.21 或更早版本)开始在几乎每个 lambda 上发出。
#pragma warning(default : 4626)
int main()
{
int foo;
auto bar = [&]() {
foo;
};
return 0;
}
<source>(8): warning C4626: 'main::<lambda_1>': assignment operator was implicitly defined as deleted
使用 /std:c++latest /W4 编译
这个警告完全没有错,但在我看来是冗长的。当从显式/隐式删除的赋值运算符派生时,我们希望保持启用 C4626 以获取警告。因为我们将每个警告都映射为错误,所以现在这是不可能的。
需要这种级别的冗长吗?还是可以说是bug?
【问题讨论】:
-
对我来说似乎是一种回归。 C4626 documentation 明确讨论了基类和派生类,它们应该与 lambda 无关。也许 MSVC 现在将每个 lambda 派生自某个基作为实现细节(不知道为什么会有用),但从 C++ 标准的角度来看,这段代码中没有发生继承。
标签: c++ visual-studio-2019 c++20