带有 lambda 的 noexcept 运算符。 MSVC 错误?

noexcept operator with lambdas. MSVC bug?

似乎 MSVC 将所有 lambda 视为 noexcept。此代码在 msvc 19.28 中编译(在编译器资源管理器中检查),但预计会失败 gcc 中的静态断言:

void foo() {
  auto lambda_may_throw = [] {};

  static_assert(noexcept(lambda_may_throw()));
}

有趣的是,我在谷歌上搜索了一下,但没有找到关于这个问题的任何信息。这真的是一个 msvc 错误还是只是我不明白什么?

该行为仅在 /permissive 中观察到。 使用 /permissive- 编译时,断言触发。

所以也许它是支持旧 Visual Studio 代码的兼容性扩展。

(您也可能会观察到它因 /std:c++latest 而失败,并在未指定 /permissive- 的情况下用 /std:c++17 编译。这不是标准的差异,而是 /std:c++latest默认情况下表示 /permissive-)