最終更新日時: 2026年05月07日 12時33分06秒 (JST)
Akira Takahashi が更新

履歴 編集

concept
<meta>

# std::meta::reflection_range(C++26)

    namespace std::meta {
      template <class R>
      concept reflection_range = ranges::input_range<R> &&
        same_as<ranges::range_value_t<R>, info>;
    }

## 概要

`reflection_range`は、要素型が`std::meta::info`であるRangeを表すコンセプトである。

`substitute()`、`define_aggregate()`、`common_type()`など、複数のリフレクションをまとめて受け取るメタ関数のテンプレートパラメータ制約として使用される。デフォルトのテンプレート引数は`std::initializer_list<info>`であり、ブレース初期化子リスト`{^^int, ^^double}`のような形式でリフレクションを渡すことができる。

## 例

    #include <meta>
    #include <vector>

    int main() {
      // initializer_listで渡す（デフォルト）
      constexpr auto r1 = std::meta::substitute(^^std::vector, {^^int});

      // vectorで渡す
      constexpr auto r2 = [] consteval {
        std::vector<std::meta::info> args;
        args.push_back(^^int);
        return std::meta::substitute(^^std::vector, args);
      }();

      static_assert(r1 == r2);
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: 16 (`-freflection` オプション指定) ✅
- Visual C++: ??

## 関連項目

- `info`
- `substitute`
- `define_aggregate`
- `can_substitute`

## 参照

- P2996R13 Reflection for C++26