namespace std::meta {
consteval bool has_inaccessible_subobjects(info r, access_context ctx);
}
概要
クラスにアクセス不可能なサブオブジェクト(基底クラスまたはメンバ変数)があるかを判定する。
has_inaccessible_basesとhas_inaccessible_nonstatic_data_membersを合わせたもので、指定したアクセスコンテキストでアクセスできない基底クラスまたはメンバ変数のいずれかが存在するかを判定する。
効果
以下と等価:
return has_inaccessible_bases(r, ctx)
|| has_inaccessible_nonstatic_data_members(r, ctx);
戻り値
指定したアクセスコンテキストでアクセスできない基底クラスまたはメンバ変数が存在する場合にtrueを返す。
例
#include <meta>
struct Base {};
class Derived : private Base {
int secret;
public:
int visible;
};
class CleanDerived : public Base {
public:
int x;
int y;
};
int main() {
constexpr auto ctx = std::meta::access_context::unprivileged();
// Derivedはprivate基底Baseとprivateメンバsecretがあるためtrue
static_assert(std::meta::has_inaccessible_subobjects(^^Derived, ctx));
// CleanDerivedはすべてpublic
static_assert(!std::meta::has_inaccessible_subobjects(^^CleanDerived, ctx));
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??