问题描述
似乎 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}} 默认)