namespace std {
template <class T>
concept destructible = is_nothrow_destructible_v<T>;
}
概要
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");
}
31
#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) {}
};
出力
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 ✅
- Visual C++: 2019 Update 3 ✅