std::meta::has_identifier
来自 zh.cppreference.net
| 定义为头文件 <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,否则
。
| 示例 本节不完整 |
原因:无示例
u8symbol_of |
(C++26)将 meta::operators 枚举项转换为其符号名称 |
u8identifier_of |
(C++26) 如果反射的实体有标识符,则获取其名称 |
u8display_string_of |
(C++26) 获取适合标识反射实体的字符串 |