如何解决带有 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 举报,一经查实,本站将立刻删除。