否,除非函数返回具有抛出析构函数的类



在下面的代码中,我认为断言不应该触发,但它确实触发了。

struct A
{
  ~A() noexcept(false);
};
A f() noexcept;
int main()
{
  static_assert(noexcept(f()), "f must be noexcept");
}

函数f()显然是 no,但noexcept(f())的计算结果为 false。(在海湾合作委员会和叮当声中)

我错过了什么还是错误?

表达式

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

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

最新更新