namespace std {
template <class T>
struct is_nothrow_destructible;
template <class T>
inline constexpr bool is_nothrow_destructible_v
= is_nothrow_destructible<T>::value; // C++17
}
概要
型T
が破棄でき、かつそのデストラクタが例外を投げないか調べる
要件
型T
は完全型であるか、const
/volatile
修飾された(あるいはされていない)void
か、要素数不明の配列型でなければならない。
効果
is_nothrow_destructible
は、型T
が例外を投げない保証のもとに破棄可能であるならばtrue_type
から派生し、そうでなければfalse_type
から派生する。
例
#include <type_traits>
struct X {
~X() {} // noexcept(true)
};
struct Y {
~Y() noexcept {}
};
struct Z {
~Z() noexcept(false) {}
};
static_assert(
std::is_nothrow_destructible<int>::value == true,
"int is nothrow destructible");
static_assert(
std::is_nothrow_destructible<X>::value == true,
"X is nothrow destructible");
static_assert(
std::is_nothrow_destructible<Y>::value == true,
"Y is nothrow destructible");
static_assert(
std::is_nothrow_destructible<Z>::value == false,
"Z isn't nothrow destructible");
int main() {}
出力
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.8.1 ✅
- Visual C++: 2012 ✅, 2013 ✅, 2015 ✅
- 2012は、正しく実装されていない。常に
true_type
になっている。
- 2012は、正しく実装されていない。常に