Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回具有抛出析构函数的类的函数的noexcept_C++_C++11_Noexcept - Fatal编程技术网

C++ 返回具有抛出析构函数的类的函数的noexcept

C++ 返回具有抛出析构函数的类的函数的noexcept,c++,c++11,noexcept,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中) 我是遗漏了什么还是一个bug?表达式e上的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中)


我是遗漏了什么还是一个bug?

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

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


这是C++17草案吗?我在C++14标准中找不到您的密码。@很简单:是的,它来自head。好问题,我不知道上次是什么时候更改的。@很简单:看起来措辞是作为的决议的一部分添加的,在2016年2月的会议上被作为缺陷报告接受。作为一个缺陷意味着这个问题可以追溯到之前的所有修订版本,因为它基本上抓住了应该一直存在的含义
noexcept
始终包含表达式显式或隐式调用的所有内容。