【发布时间】:2015-02-19 01:46:31
【问题描述】:
每当Foo 的析构函数没有抛出时,我试图指定一个函数是nothrow。我可以通过使用类型特征std::is_nothrow_destructible<> 来做到这一点。我怎样才能直接做到这一点?我已经尝试了以下方法,但如果我取消注释注释行,它不会编译
#include <iostream>
#include <type_traits>
class Foo
{
public:
~Foo() noexcept {}
};
// void f() noexcept(noexcept(~Foo{})) { } // error here
void g() noexcept(std::is_nothrow_destructible<Foo>::value)
{
}
int main()
{
g();
}
我收到一个错误
error: no match for 'operator~' (operand type is 'Foo')
错误说明符noexcept(noexcept(~Foo())) 不行,尽管对于构造函数我可以使用noexcept(noexcept(Foo()))。我在这里遗漏了一些明显的语法吗?
【问题讨论】:
-
析构函数永远不应该抛出异常。
-
析构函数隐式为
noexcept(true),因此无需仅为noexcept规范添加用户定义的析构函数。 -
@PaulMcKenzie 是的,我知道这一点,我只是在搞砸
nothrow并遇到了这个问题。
标签: c++ exception c++11 nothrow