带有 lambda 的 noexcept 运算符。 MSVC 错误?
noexcept operator with lambdas. MSVC bug?
似乎 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
而失败,并在未指定 /permissive-
的情况下用 /std:c++17
编译。这不是标准的差异,而是 /std:c++latest
默认情况下表示 /permissive-
)
似乎 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
而失败,并在未指定 /permissive-
的情况下用 /std:c++17
编译。这不是标准的差异,而是 /std:c++latest
默认情况下表示 /permissive-
)