std::meta::template_arguments_of
От ru.cppreference.net
| Определено в заголовке <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() {}
См. также
Template:cpp/meta/dsc is template(C++26) |
проверяет, создаётся ли отражаемая сущность путём подстановки аргументов шаблона в шаблон (функция) |