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()))
は OK ではありませんが、コンストラクターには を使用できますnoexcept(noexcept(Foo()))
。ここにいくつかの明らかな構文がありませんか?