namespace std::meta {
consteval bool is_accessible(info r, access_context ctx);
}
概要
指定したアクセスコンテキストでアクセス可能かを判定する。
任意のリフレクションを受け取れる。クラスメンバや直接基底クラス関係以外のリフレクション(型や名前空間など)に対しては常にtrueを返す。
戻り値
rがクラスメンバまたは直接基底クラス関係を表す場合、アクセスコンテキストctxでアクセス可能であればtrueを返す。それ以外のリフレクションに対してはtrueを返す。
例外
rがクラスメンバを表し、そのメンバの親クラスが不完全な場合、または不完全な派生クラスを含む基底クラス関係を表す場合、std::meta::exception例外を送出する。
例
#include <meta>
class C {
int secret;
public:
int visible;
};
consteval bool check() {
auto members = std::meta::nonstatic_data_members_of(
^^C, std::meta::access_context::unchecked());
auto ctx = std::meta::access_context::unprivileged();
return !std::meta::is_accessible(members[0], ctx) // secret: private
&& std::meta::is_accessible(members[1], ctx); // visible: public
}
int main() {
static_assert(check());
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??