std::meta::template_arguments_of
ja.cppreference.net から
| ヘッダ <meta>
|
||
consteval std::vector<std::meta::info> template_arguments_of( std::meta::info r );
|
で定義 (C++26 から) | |
r が表すエンティティをインスタンス化するために使用されたテンプレート引数のリフレクションを含む vector を、テンプレート引数リストに現れる順序で返します。
与えられたテンプレート引数 A について、対応するリフレクション値 R は次のように決定されます:
Aが型または型エイリアスの場合、Rはその型を表します。- そうでなく、
Aがクラステンプレート、変数テンプレート、コンセプト、またはエイリアステンプレートの場合、Rはそのテンプレートを表します。 - それ以外の場合 (
Aが非型テンプレート引数のとき)、Pを対応するテンプレートパラメータとします。
Pが参照型の場合、RはAが参照するオブジェクトまたは関数を表します。Pがクラス型の場合、Rは対応するテンプレートパラメータオブジェクトを表します。- それ以外の場合、
RはAの値を表します。
引数
| r | - | リフレクション値 |
戻り値
r が表すもののテンプレート引数のリフレクションを含む vector。
例外
std::meta::exception を投げます。ただし、std::meta::has_template_arguments(r) が true である場合 (すなわち r がテンプレートからインスタンス化されたエンティティを表す場合) を除きます。
例
このコードを実行
#include <meta>
#include <type_traits>
static_assert(template_arguments_of(^^std::void_t<int>)[0] == ^^int);
static_assert(template_arguments_of(^^std::enable_if<true>).size() == 2);
static_assert(template_arguments_of(^^std::enable_if<true>)[0] ==
std::meta::reflect_constant(true));
static_assert(template_arguments_of(^^std::enable_if<true>)[1] == ^^void);
int main() {}
関連項目
Template:cpp/meta/dsc is template(C++26) |
リフレクトされたエンティティがテンプレートへのテンプレート引数の置換によって生成されるかどうかを検査します (関数) |