Namespaces
Variants

std::meta::is_accessible

С ru.cppreference.net
< cpp | meta
 
 
 
Библиотека рефлексии
Запросы доступности членов
Идентификация области видимости
Запросы членов рефлексии
Рефлексия аннотаций
Извлечение значения
Подстановка рефлексии
Рефлексия результата выражения
Генерация определения класса

Первичные категории типов
Составные категории типов
Свойства типов ➜
Отношения типов
 
Типы и запросы рефлексии
Запросы рефлексии
Запросы компоновки рефлексии
Свойства типов
Запросы свойств типов
 
Определён в заголовочном файле <meta>
consteval bool is_accessible( std::meta::info r, std::meta::access_context ctx );
(начиная с C++26)

Определяет, является ли элемент или базовый класс, представленный r является доступным в контексте ctx.

Если r не представляет элемент класса или отношение прямого базового класса, возвращает true. В противном случае, пусть:

  • PARENT_CLS будет классом, который содержит объявление того, что r представляет, или производным классом в отношении прямого базового класса;
  • DESIGNATING_CLS будет ctx.designating_class(), если это не нулевая рефлексия, или PARENT_CLS в противном случае.

Результат определяется следующим образом:

  • Если DESIGNATING_CLS не является тем же или производным от PARENT_CLS, то возвращает false.
  • В противном случае, если ctx.scope() является нулевой рефлексией, то возвращает true.
  • В противном случае, если r представляет отношение прямого базового класса, где базовым классом является B, возвращает true, если базовый класс B класса DESIGNATING_CLS доступен внутри ctx.scope(); в противном случае возвращает false.
  • В противном случае, r представляет элемент M. возвращает true, если M как элемент DESIGNATING_CLS был бы доступен внутри ctx.scope() при игнорировании эффекта любого using-объявления; в противном случае возвращает false.

Эта функция обрабатывает безымянное битовое поле как нестатический элемент данных с тем же доступом.

Параметры

r - значение рефлексии
ctx - контекст доступа

Возвращаемое значение

true если то, что r представляет, доступно в контексте ctx, в противном случае false

Исключения

Выбрасывает std::meta::exception, если r представляет элемент класса, который в данный момент определяется.

Пример

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

См. также

представляет контекст для проверки доступа
(класс)