Skip to content

Latest commit

 

History

History
65 lines (50 loc) · 1.87 KB

File metadata and controls

65 lines (50 loc) · 1.87 KB

reflection_range

  • meta[meta header]
  • std::meta[meta namespace]
  • concept[meta id-type]
  • cpp26[meta cpp]
namespace std::meta {
  template <class R>
  concept reflection_range = ranges::input_range<R> &&
    same_as<ranges::range_value_t<R>, info>;
}
  • info[link info.md]

概要

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);
}
  • std::meta::substitute[link substitute.md]

出力

バージョン

言語

  • C++26

処理系

関連項目

参照