C ++ 11默认将析构函数指定为noexcept
。有没有办法让Clang报告我的noexcept
析构函数可能抛出异常(因此调用std::terminate
)的情况?
答案 0 :(得分:1)
首先,默认情况下,C ++不会将析构函数指定为noexcept
它将它们指定为noexcept(all subobjects destructors are noexcept)
。
接下来,我们可以将表达式和语句分别分为以下几个类别:
在所有这些中,只有第一个案例会被标记为为例外。
为了获得良好的结果,编译器必须能够充分分析程序行为,以确定是否在任何可能的状态下执行抛出表达式。
如果您对过多关于不可能的情况的警告感到满意,您可以在此处获得结果 相反,如果你只是想警告公然的案例,你也可能会得到一些结果。
麻烦的是,所有有趣的案例都转移到解决the halting problem 不,我们再也没有了。