std::meta::template_arguments_of
Определён в заголовочном файле <meta> | ||
|---|---|---|
consteval std::vector<std::meta::info> template_arguments_of( std::meta::info r ); | (начиная с C++26) |
Возвращает вектор, содержащий отражения аргументов шаблона, использованных для создания экземпляра сущности, представленной r, в порядке их появления в списке аргументов шаблона.
Для заданного аргумента шаблона A соответствующее значение отражения R определяется следующим образом:
- Если
Aявляется типом или псевдонимом типа,Rпредставляет тип. - Иначе, если
Aявляется шаблоном класса, шаблоном переменной, концептом или шаблоном псевдонима,Rпредставляет шаблон. - Иначе (
Aявляется нетиповым аргументом шаблона) пустьPбудет соответствующим параметром шаблона. - Если
Pимеет ссылочный тип,Rпредставляет объект или функцию, на которые ссылаетсяA. - Если
Pимеет тип класса,Rпредставляет соответствующий объект параметра шаблона. - Иначе
Rпредставляет значениеA.
Параметры
| r | - | значение отражения |
Возвращаемое значение
Вектор, содержащий отражения аргументов шаблона того, что представляет r.
Исключения
Выбрасывает 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() {}
См. также
|
(C++26) | проверяет, является ли отражённая сущность шаблоном (функция) |
|
(C++26) | проверяет, создана ли отражённая сущность подстановкой аргументов шаблона в шаблон (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/template_arguments_of