Namespaces
Variants

std::meta::has_identifier

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

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

Определяет, имеет ли то, что представляет r связанный идентификатор (включая идентификатор суффикса литерала).

Формально:

  • Если r представляет сущность с typedef-именем для целей компоновки, возвращает true.
  • В противном случае, если r представляет безымянный класс, перечисление, переменную, битовое поле или пространство имён, возвращает false.
  • В противном случае, если r представляет псевдоним типа, возвращает !std::meta::has_template_arguments(r).
  • В противном случае, если r представляет тип, возвращает true если:
  • rпредставляет тип класса без cv-квалификаторов и std::meta::has_template_arguments(r) равен false, или
  • rпредставляет тип перечисления без cv-квалификаторов.
  • В противном случае, если r представляет функцию, возвращает true если std::meta::has_template_arguments(r) равен false, и функция не является конструктором, деструктором, функцией-оператором или функцией преобразования.
  • В противном случае, если r представляет шаблон, возвращает true если шаблон не является шаблоном конструктора, шаблоном функции-оператора или шаблоном функции преобразования.
  • В противном случае, если r представляет параметр функции функции, которая является экземпляром шаблона функции, и параметр является элементом пакета параметров функции, возвращает false.
  • В противном случае, если r представляет параметр функции P функции F, то пусть S будет множеством объявлений, игнорируя любые явные экземпляры, которые достижимы из точки в контексте вычисления и которые объявляют либо F, либо шаблонную функцию, специализацией которой является F; возвращает true если
  • существует объявление D в S, которое вводит имя N для либо P, либо параметра, соответствующего P в шаблонной функции, которую объявляет D, и
  • ни одно объявление в S не делает этого, используя любое имя, отличное от N.
void fun(int);
constexpr std::meta::info r = parameters_of(^^fun)[0];
static_assert(!has_identifier(r));

void fun(int x);
static_assert(has_identifier(r));

void fun(int x);
static_assert(has_identifier(r));

void poison() {
    void fun(int y);
}
static_assert(!has_identifier(r));
  • В противном случае, если r представляет переменную, возвращает false если либо переменная соответствует элементу пакета параметров функции, либо std::meta::has_template_arguments(r) равен true, и возвращает true в противном случае.
  • В противном случае, если r представляет структурированную привязку, возвращает false если структурированная привязка является элементом пакета структурированных привязок, или true в противном случае.
  • В противном случае, если r представляет перечислитель, нестатический элемент данных, пространство имён или псевдоним пространства имён, возвращает true.
  • В противном случае, если r представляет отношение прямой базовой связи, возвращает std::meta::has_identifier(std::meta::type_of(r)).
  • В противном случае, если r представляет описание элемента данных (T, N, A, W, NUA, ANN), возвращает true если имя описания N не равно ⊥.
  • В противном случае возвращает false.

Параметры

r - значение рефлексии

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

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

Пример

Смотри также

преобразует перечислитель meta::operators в его символьное имя
(функция)
если отражённая сущность имеет идентификатор, получает её имя
(функция)
получает строку, подходящую для идентификации отражённой сущности
(функция)