std::meta::is_enumerable_type
来自 zh.cppreference.net
| 定义于头文件 <meta>
|
||
consteval bool is_enumerable_type( std::meta::info r );
|
(自 C++26) | |
判断 r 是否表示一个完整的类类型,或一个枚举类型(其枚举项列表已完全定义),或者它们的类型别名。
正式地说,类型 T 从点 可枚举,如果从某个点 P 来看:
T是在点 P 完整的类类型,或者T是由声明D定义的枚举类型,使得D从 P 可达,并且 P 不出现于 enum-specifier ofD中。
参数
| r | - | 一个反射值 |
返回值
true如果 std::meta::dealias(r) 表示一个在求值上下文中某个点可枚举的类型,则为 false,否则为
注意
标准反射函数要求类型可枚举,以获取其基类、成员或枚举项的列表。
示例
运行此代码
#include <meta>
struct A; // incomplete type
static_assert(std::meta::is_enumerable_type(^^A) == false);
struct B {}; // complete type
static_assert(std::meta::is_enumerable_type(^^B) == true);
template <typename>
struct C; // incomplete class template
static_assert(std::meta::is_enumerable_type(^^C<long>) == false);
template <>
struct C<int> {}; // complete explicit template specialization
static_assert(std::meta::is_enumerable_type(^^C<int>) == true);
template <>
struct C<long>; // incomplete explicit template specialization
static_assert(std::meta::is_enumerable_type(^^C<long>) == false);
enum class E;
static_assert(std::meta::is_enumerable_type(^^E) == false);
enum class E { e };
static_assert(std::meta::is_enumerable_type(^^E) == true);
static_assert(std::meta::is_enumerable_type(^^E::e) == false);
union U;
static_assert(std::meta::is_enumerable_type(^^U) == false);
union U { int i; short j; };
static_assert(std::meta::is_enumerable_type(^^U) == true);
int main() {}
参阅
(C++26) |
检查反射是否表示一个完整类型 (函数) |