Namespaces
Variants

std::meta::is_accessible

Depuis fr.cppreference.net
< cpp | meta
 
 
 
Bibliothèque de réflexion
 
Types et requêtes de réflexion
Requêtes de réflexion
Requêtes de disposition de réflexion
Propriétés de type
Requêtes de propriétés de type
 
Défini dans l'en-tête <meta>
consteval bool is_accessible( std::meta::info r, std::meta::access_context ctx );
(depuis C++26)

Détermine si le membre ou la classe de base représenté par r est accessible dans le contexte de ctx.

Si r ne représente pas un membre de classe ou une relation de classe de base directe, retourne true. Sinon, soit :

  • PARENT_CLS soit la classe qui contient la déclaration de ce que r représente ou la classe dérivée dans la relation de base directe ;
  • DESIGNATING_CLS soit ctx.designating_class() si ce n'est pas la réflexion nulle, ou PARENT_CLS sinon.

Le résultat est déterminé comme suit :

  • Si DESIGNATING_CLS n'est pas identique à ou dérivé de PARENT_CLS, alors retourne false.
  • Sinon, si ctx.scope() est la réflexion nulle, alors retourne true.
  • Sinon, si r représente une relation de classe de base directe où la classe de base est B, retourne true si la classe de base B de DESIGNATING_CLS est accessible dans ctx.scope() ; sinon retourne false.
  • Sinon, r représente un membre M. retourne true si M en tant que membre de DESIGNATING_CLS serait accessible dans ctx.scope() si l'effet de toute déclaration using était ignoré ; sinon retourne false.

Cette fonction traite un champ de bits non nommé comme un membre de données non statique avec le même accès.

Paramètres

r - une valeur de réflexion
ctx - un contexte d'accès

Valeur de retour

true si ce que r représente est accessible dans le contexte ctx, sinon false

Exceptions

Lève std::meta::exception si r représente un membre d'une classe en cours de définition.

Exemple

#include <meta>

consteval std::meta::access_context fn()
{
    return std::meta::access_context::current();
}

class C
{
    [[maybe_unused]] int moo;
    friend consteval std::meta::access_context fn();

public:
    static constexpr auto r{^^moo};
};

static_assert(is_accessible(C::r, fn()) == true);
static_assert(is_accessible(C::r, std::meta::access_context::current()) == false);
static_assert(is_accessible(C::r, std::meta::access_context::unchecked()) == true);

int main() {}

Voir aussi

représente un contexte pour la vérification d'accès
(classe)