最終更新日時(UTC): 2026年05月07日 03時33分06秒
Akira Takahashi が更新

履歴 編集

function
<meta>

# std::meta::has_inaccessible_subobjects(C++26)

    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++: ??

## 関連項目

- `has_inaccessible_bases`
- `has_inaccessible_nonstatic_data_members`
- `subobjects_of`

## 参照

- P3293R3 Splicing a base class subobject