最終更新日時(UTC):
が更新

履歴 編集

function
<meta>

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

namespace std::meta {
  consteval bool has_inaccessible_subobjects(info r, access_context ctx);
}

概要

クラスにアクセス不可能なサブオブジェクト(基底クラスまたはメンバ変数)があるかを判定する。

has_inaccessible_baseshas_inaccessible_nonstatic_data_membersを合わせたもので、指定したアクセスコンテキストでアクセスできない基底クラスまたはメンバ変数のいずれかが存在するかを判定する。

効果

以下と等価:

戻り値

指定したアクセスコンテキストでアクセスできない基底クラスまたはメンバ変数が存在する場合に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

処理系

関連項目

参照