Namespaces
Variants

std::meta::is_enumerable_type

ja.cppreference.net より
< cpp | meta
 
 
 
リフレクションライブラリ
 
リフレクション型とクエリ
リフレクションクエリ
リフレクションレイアウトクエリ
型プロパティ
型プロパティクエリ
 
ヘッダで定義 <meta>
consteval bool is_enumerable_type( std::meta::info r );
(C++26 以降)

以下かどうかを判定する: r は 完全 クラス型または 列挙型 であり、その列挙子のリストが完全に定義されているか、またはその型エイリアスである。

形式的に、型 T は 列挙可能 であるのは、ある時点 P 場合:

  • T は、クラス型完全時点 P または
  • T は、宣言 D によって定義される列挙型であり、 D から到達可能で P であり、 P 内に現れない 列挙指定子 の D。

引数

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() {}

このコードを実行

is_complete_type
(C++26)
リフレクションが完全型を表すかどうかをチェックする
(関数)