namespace std::meta {
consteval bool is_deleted(info r);
}
概要
削除関数(規格上のdeleted function)であるかを判定する。
削除関数には、以下が含まれる:
= deleteを明示的に付加して宣言された関数- 暗黙的にdeleteされる関数(例えば、deleteされた基底クラスの特殊メンバ関数によって、派生クラスで暗黙的に対応する特殊メンバ関数がdeleteされる場合)
= defaultを明示的に付加して宣言されたが、結果としてdeleteされる関数(例えば、基底クラスのムーブコンストラクタがdeleteされている状態で、派生クラスで= default指定されたムーブコンストラクタ)
戻り値
rが削除関数を表す場合にtrueを返す。
例
#include <meta>
struct B {
B(const B&) = delete;
B(B&&) = delete;
};
struct S : B {
S() = delete; // 明示的にdelete宣言された関数: 削除関数
// S(const S&); // 暗黙的に宣言されるが基底のdeleteにより削除関数とみなされる
S(S&&) = default; // 明示的にdefault宣言だが、基底クラスのdeleteにより削除関数とみなされる
};
int main() {
template for (constexpr auto m :
std::define_static_array(std::meta::members_of(^^S,
std::meta::access_context::unchecked()))) {
// S()、S(const S&)、S(S&&)はいずれも削除関数
if constexpr (std::meta::is_constructor(m)) {
static_assert(std::meta::is_deleted(m));
}
}
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??