2

我试图指定一个函数是nothrow每当析构函数Foo不抛出时。我可以通过使用类型 trait 来做到这一点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())). 我在这里遗漏了一些明显的语法吗?

4

1 回答 1

5

只能通过成员访问表达式调用析构函数。所以语法是:

void f() noexcept(noexcept(std::declval<Foo>().~Foo()))
于 2015-02-19T01:49:23.460 回答