Namespaces
Variants

std::meta::is_complete_type

出典: ja.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)
リフレクションが型を表すかどうかを確認します
(関数)