Namespaces
Variants

std::meta::is_complete_type

来自 zh.cppreference.net
< cpp | meta
 
 
 
反射库
 
反射类型和查询
反射查询
反射布局查询
类型属性
类型属性查询
 
定义于头文件 <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)
检查反射是否表示一个类型
(函数)