Namespaces
Variants

std::meta::reflect_constant_array

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

要素が r の対応する要素である配列オブジェクトを表すリフレクションを返します。

結果のオブジェクトは テンプレート引数オブジェクト です:静的記憶域期間を持ち、テンプレート引数と等価な内容を持つレンジは同じオブジェクトに対応します。

r のサイズがゼロでない場合、結果の配列オブジェクトは 潜在的に一意でないオブジェクト です。

U を ranges::range_value_t<R>、T を std::remove_all_extents_t<U> とします。

以下のいずれかが真である場合、プログラムは ill-formed です:

  • T が 構造体型 でない。
  • Tcopy_constructible を満たさない。
  • U が配列型でなく、かつ std::is_constructible_v<T, ranges::range_reference_t<R>> が false である。

引数

r - input_range

戻り値

r のサイズがゼロでない場合、型 (ここで は const T[N] のサイズ) の Nテンプレート引数オブジェクトr を表すリフレクション。テンプレート引数オブジェクトの各要素は以下とテンプレート引数と等価です:

  • std::meta::reflect_constant_array(*it) U が配列型の場合、
  • std::meta::reflect_constant(static_cast<T>(*it)) それ以外の場合、

ここで it は r の対応する要素へのイテレータ。

それ以外の場合 (r のサイズがゼロ)、型 const std::array<T, 0> のテンプレート引数オブジェクトを {} で初期化したものを表すリフレクション。

例外

以下によってスローされる任意の例外をスローします:

  • r に対する操作、または r のイテレータや番兵に対する操作;
  • std::meta::reflect_constant の任意の引数、または上記の std::meta::reflect_constant_array の任意の呼び出し。

std::meta::exception をスローします。ただし、std::meta::reflect_constant の呼び出しが例外で終了する場合は除きます。

ノート

std::meta::reflect_constant_array の結果は std::meta::substitute で使用するのに適しています。呼び出し元がリフレクション値ではなく静的配列の std::span を必要とする場合、通常は std::define_static_array の方が適切です。

例

関連項目

コンパイル時配列を静的ストレージに昇格させ、静的配列の span を返す
(関数テンプレート)
コンパイル時文字列を静的ストレージに昇格させ、静的文字列を表すリフレクションを返す
(関数テンプレート)
値または テンプレート引数オブジェクト を表すリフレクションを返し、定数テンプレート引数として使用するのに適する
(関数テンプレート)