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
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??