微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决带有 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}} 默认)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。