Spec-Zone.ru › C++

std::meta::has_identifier

Определено в заголовочном файле <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, если
    • в S имеется объявление D, вводящее имя 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.

Пример

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/has_identifier

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API