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

问题描述

似乎 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 失败并用 /std:c++17 编译而不指定 /permissive-。这不是标准的区别,而是 /std:c++latest 也暗示 { {1}} 默认)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...