std::meta::is_accessible
De es.cppreference.net
| 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_CLSla clase que contiene la declaración de lo querrepresenta o la clase derivada en la relación de base directa;DESIGNATING_CLSseactx.designating_class()si no es la reflexión nula, oPARENT_CLSen caso contrario.
El resultado se determina de la siguiente manera:
- Si
DESIGNATING_CLSno es la misma quePARENT_CLSni está derivada de ella, entonces retornafalse. - De lo contrario, si
ctx.scope()es la reflexión nula, entonces retornatrue. - De lo contrario, si
rrepresenta una relación de clase base directa donde la clase base esB, retornatruesi la clase baseBdeDESIGNATING_CLSes accesible dentro dectx.scope(); de lo contrario retornafalse. - De lo contrario,
rrepresenta un miembro M. retornatruesi M como miembro deDESIGNATING_CLSsería accesible dentro dectx.scope()si se ignorara el efecto de cualquier declaración using; de lo contrario retornafalse.
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
Ejecutar este código
#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
(C++26) |
representa un contexto para la comprobación de acceso (clase) |