Dmi*_*zer 6 c++ visual-c++ noexcept
似乎 MSVC 将所有 lambda 都视为 noexcept。此代码在 msvc 19.28 中编译(在编译器资源管理器中检查),但预计会在 gcc 中失败静态断言:
void foo() {
auto lambda_may_throw = [] {};
static_assert(noexcept(lambda_may_throw()));
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,我用谷歌搜索了一下,但无法找到有关此问题的任何信息。这真的是 msvc 错误还是只是我没明白什么?
该行为仅在 时观察到/permissive。当使用 编译时/permissive-,断言会触发。
因此,它可能是一个兼容性扩展,以支持旧版 Visual Studio 代码。
(您还可能会发现它会失败并在不指定的情况/std:c++latest下进行编译。这不是标准的差异,而是默认情况下也意味着)/std:c++17/permissive-/std:c++latest/permissive-