当我可能从'noexcept`析构函数中抛出异常时,Clang可以警告我吗?

时间:2014-11-10 21:45:48

标签: c++11 exception-handling clang clang++ noexcept

C ++ 11默认将析构函数指定为noexcept。有没有办法让Clang报告我的noexcept析构函数可能抛出异常(因此调用std::terminate)的情况?

1 个答案:

答案 0 :(得分:1)

首先,默认情况下,C ++不会将析构函数指定为noexcept 它将它们指定为noexcept(all subobjects destructors are noexcept)

接下来,我们可以将表达式和语句分别分为以下几个类别:

  1. 永远不会回来,可能会回来,永远都会回来。
  2. 永远不要扔,可能扔,总是扔。
  3. 在所有这些中,只有第一个案例会被标记为为例外。

    为了获得良好的结果,编译器必须能够充分分析程序行为,以确定是否在任何可能的状态下执行抛出表达式。

    如果您对过多关于不可能的情况的警告感到满意,您可以在此处获得结果 相反,如果你只是想警告公然的案例,你也可能会得到一些结果。

    麻烦的是,所有有趣的案例都转移到解决the halting problem 不,我们再也没有了。