如何为析构函数指定 nothrow 异常说明符?
How to specify nothrow exception specifier for destructor?
我试图指定一个函数是 nothrow
只要 Foo
的析构函数不抛出。我可以通过使用类型特征 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()))
。我在这里遗漏了一些明显的语法吗?
只能通过成员访问表达式调用析构函数。所以语法是:
void f() noexcept(noexcept(std::declval<Foo>().~Foo()))
我试图指定一个函数是 nothrow
只要 Foo
的析构函数不抛出。我可以通过使用类型特征 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()))
。我在这里遗漏了一些明显的语法吗?
只能通过成员访问表达式调用析构函数。所以语法是:
void f() noexcept(noexcept(std::declval<Foo>().~Foo()))