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.
Пример
См. также
|
(начиная с C++26)(начиная с C++26) | преобразует перечислитель meta::operators в его символьное имя (функция) |
|
(начиная с C++26)(начиная с C++26) | если отражённая сущность имеет идентификатор, получает её имя (функция) |
|
(начиная с 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