Namespaces
Variants

std::meta::is_accessible

De es.cppreference.net
< cpp | meta
 
 
 
Biblioteca de reflexión
 
Tipos y consultas de reflexión
Consultas de reflexión
Consultas de diseño de reflexión
Propiedades de tipo
Consultas de propiedades de tipo
 
Definido en el encabezado <meta>
consteval bool is_accessible( std::meta::info r, std::meta::access_context ctx );
(desde C++26)

Determina si el miembro o clase base representado por r es accesible en el contexto de ctx.

Si r no representa un miembro de clase o una relación de clase base directa, retorna true. De lo contrario, sea:

  • PARENT_CLS la clase que contiene la declaración de lo que r representa o la clase derivada en la relación de base directa;
  • DESIGNATING_CLS sea ctx.designating_class() si no es la reflexión nula, o PARENT_CLS en caso contrario.

El resultado se determina de la siguiente manera:

  • Si DESIGNATING_CLS no es la misma que PARENT_CLS ni está derivada de ella, entonces retorna false.
  • De lo contrario, si ctx.scope() es la reflexión nula, entonces retorna true.
  • De lo contrario, si r representa una relación de clase base directa donde la clase base es B, retorna true si la clase base B de DESIGNATING_CLS es accesible dentro de ctx.scope(); de lo contrario retorna false.
  • De lo contrario, r representa un miembro M. retorna true si M como miembro de DESIGNATING_CLS sería accesible dentro de ctx.scope() si se ignorara el efecto de cualquier declaración using; de lo contrario retorna false.

Esta función trata un campo de bits anónimo como un miembro de dato no estático con el mismo acceso.

Parámetros

r - un valor de reflexión
ctx - un contexto de acceso

Valor de retorno

true si lo que r representa es accesible en el contexto ctx, de lo contrario false

Excepciones

Lanza std::meta::exception si r representa un miembro de una clase que se está definiendo actualmente.

Ejemplo

#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() {}

Véase también

representa un contexto para la comprobación de acceso
(clase)