std::meta::is_complete_type
来自 zh.cppreference.net
| 定义于头文件 <meta>
|
||
consteval bool is_complete_type( std::meta::info r );
|
(C++26起) | |
确定反射 r 表示一个 完整类型。
正式地,返回 true 如果 std::meta::is_type(r) 是 true 并且求值上下文中存在一点,使得由 std::meta::dealias(r) 表示的类型不是不完整类型。否则,返回 false。
参数
| r | - | 要检查的反射 |
返回值
true 如果 r 表示完整类型,则返回 false 否则返回
注解
一个 枚举类型 如果其底层类型已知,则为完整类型。要检查其枚举符列表是否完整定义,参见 std::meta::is_enumerable_type。
enum E : int;
static_assert(std::meta::is_complete_type(^^E));
static_assert(!std::meta::is_enumerable_type(^^E));
enum E : int { e };
static_assert(std::meta::is_enumerable_type(^^E));
示例
运行此代码
#include <meta>
struct A; // incomplete type
struct B {}; // complete type
static_assert(std::meta::is_complete_type(^^A) == false);
static_assert(std::meta::is_complete_type(^^B) == true);
template <typename>
struct C; // incomplete class template
template <>
struct C<int> {}; // complete explicit template specialization
template <>
struct C<long>; // incomplete explicit template specialization
static_assert(std::meta::is_complete_type(^^C<long>) == false);
static_assert(std::meta::is_complete_type(^^C<char>) == false);
static_assert(std::meta::is_complete_type(^^C<int>) == true);
int main() {}
参阅
(C++26) |
检查反射是否表示一个类型 (函数) |