编译器警告或静态分析违反noexcept保证?

Ale*_*kiy 5 c++ noexcept c++11

我大量使用noexcept,不幸的是如果一些传递依赖最终导致一个罕见的情况(我们不知道),崩溃是非常难以调试 - 因为被调用的noexcept原因std::terminate.

有没有办法在编译时检测这些违规?在下面的示例中,问题很明显,但默认情况下没有编译器捕获它.我意识到在所有情况下都不可能,但肯定更简单的情况应该是可能的

#include <stdexcept>

void baz()
{
    throw std::runtime_error("std::terminate awaits");
}

void bar()
{
    baz();
}

void foo() noexcept
{
    bar();
}
Run Code Online (Sandbox Code Playgroud)

链接到godbolt:https://godbolt.org/z/Ooet58

是否有我不知道的编译器标志?如何捕获这个静态分析工具呢?

dar*_*sys 0

查看 Microsoft\xe2\x80\x99s 静态分析工具,它可以准确检查此违规:Don\xe2\x80\x99t throw in noexcept

\n\n

编辑:该工具还可以告诉您哪些函数可以标记为 noexcept,这应该可以更轻松地显着缩小抛出函数的范围。

\n