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