- concepts[meta header]
- std[meta namespace]
- concept[meta id-type]
- cpp20[meta cpp]
namespace std {
template <class T>
concept destructible = is_nothrow_destructible_v<T>;
}
- is_nothrow_destructible_v[link /reference/type_traits/is_nothrow_destructible.md]
destructible
は、任意の型T
が破棄可能であることを表すコンセプトである。
デストラクタが実際に例外を投げる事はないが、noexcept(false)
相当の指定がされているような場合でも、本コンセプトを満たす事は出来ない。
#include <iostream>
#include <concepts>
#include <vector>
template<std::destructible T>
void f(const char* name) {
std::cout << name << " is destructible" << std::endl;
}
template<typename T>
void f(const char* name) {
std::cout << name << " is not destructible" << std::endl;
}
struct S1 {
~S1() noexcept(false) {}
};
struct S2 {
~S2() = delete;
};
int main() {
f<int>("int");
f<std::vector<int>>("std::vector<int>");
f<S1>("S1");
f<S2>("S2");
f<void>("void");
}
- std::destructible[color ff0000]
int is destructible
std::vector<int> is destructible
S1 is not destructible
S2 is not destructible
void is not destructible
- C++20
- Clang: ??
- GCC: 10.1 [mark verified]
- Visual C++: 2019 Update 3 [mark verified]