namespace std::meta {
consteval bool is_override(info r);
}
概要
基底クラスの仮想関数をオーバーライドしているメンバ関数であるかを判定する。overrideキーワードの有無に関係なく、意味的にオーバーライドしていればtrueを返す。
戻り値
rが別のメンバ関数をオーバーライドしているメンバ関数を表す場合にtrueを返す。
例
#include <meta>
struct Base {
virtual void f() {}
virtual void g() {}
};
struct Derived : Base {
void f() override {} // overrideキーワードあり
void g() {} // overrideキーワードなしだが、オーバーライドしている
};
int main() {
// 基底クラスの仮想関数はオーバーライドではない
static_assert(!std::meta::is_override(^^Base::f));
// overrideキーワードの有無に関係なく、オーバーライドしていればtrue
static_assert(std::meta::is_override(^^Derived::f));
static_assert(std::meta::is_override(^^Derived::g));
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??