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++: ??