最終更新日時(UTC):
が更新

履歴 編集

function template
<meta>

std::meta::reflect_constant_array(C++26)

namespace std::meta {
  template <ranges::input_range R>
  consteval info reflect_constant_array(R&& r);
}

概要

構造的型の要素を持つRangeから、静的配列のリフレクションを生成する。

define_static_array()spanを返すため実行時のアクセスには便利だが、spanは構造化束縛によるパック展開ができない。この関数は配列のリフレクションを返すため、スプライスして構造化束縛でパック展開する用途に使用できる。

また、define_static_array()はこの関数を内部で使用して実装されている。

戻り値

rの要素をコピーしたconst T[N]のテンプレートパラメータオブジェクトのリフレクションを返す。

#include <meta>
#include <array>

// 構造化束縛のパック展開はテンプレート文脈で使用する必要がある
template <int>
consteval int sum() {
  // 配列のリフレクションをスプライスし、構造化束縛でパック展開
  constexpr auto [...elems] =
      [:std::meta::reflect_constant_array(std::array{1, 2, 3}):];
  return (... + elems);
}

int main() {
  static_assert(sum<0>() == 6);
}

出力

バージョン

言語

  • C++26

処理系

関連項目

参照