- meta[meta header]
- std::meta[meta namespace]
- function[meta id-type]
- cpp26[meta cpp]
namespace std::meta {
consteval bool has_inaccessible_subobjects(info r, access_context ctx);
}- info[link info.md]
- access_context[link access_context.md]
クラスにアクセス不可能なサブオブジェクト(基底クラスまたはメンバ変数)があるかを判定する。
has_inaccessible_basesとhas_inaccessible_nonstatic_data_membersを合わせたもので、指定したアクセスコンテキストでアクセスできない基底クラスまたはメンバ変数のいずれかが存在するかを判定する。
以下と等価:
return has_inaccessible_bases(r, ctx)
|| has_inaccessible_nonstatic_data_members(r, ctx);- has_inaccessible_bases[link has_inaccessible_bases.md]
- has_inaccessible_nonstatic_data_members[link has_inaccessible_nonstatic_data_members.md]
指定したアクセスコンテキストでアクセスできない基底クラスまたはメンバ変数が存在する場合に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));
}- std::meta::has_inaccessible_subobjects[color ff0000]
- std::meta::access_context[link access_context.md]
- unprivileged[link access_context/unprivileged.md]
- C++26
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) [mark verified] - Visual C++: ??