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

履歴 編集

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

処理系

関連項目

参照