noexcept函数返回一个抛出析构函数的类

时间:2016-03-21 10:05:30

标签: c++ c++11 noexcept

在下面的代码中,我认为断言不应该解雇,但确实如此。

struct A
{
  ~A() noexcept(false);
};

A f() noexcept;

int main()
{
  static_assert(noexcept(f()), "f must be noexcept");
}

显然,函数f()是noexcept,但noexcept(f())被评估为false。 (在gcc和clang两者中)

我错过了什么或是个错误吗?

1 个答案:

答案 0 :(得分:4)

表达式noexcept上的e运算符会告诉您表达式的潜在异常集是否为空。该集合包含析构函数的潜在异常,如[except.spec] /(13.2):

  

如果e隐式调用一个或多个函数(例如重载运算符,new表达式中的分配函数,或者析构函数,如果e是完整表达式(1.9)), S 是:[...]所有此类函数的异常规范中的类型集合