Namespaces
Variants

std::meta::template_arguments_of

От ru.cppreference.net
< cpp | meta
 
 
 
Библиотека отражения
Запросы доступности членов
Идентификация области видимости
Запросы членов отражения
Отражение аннотаций
Извлечение значений
Подстановка отражения
Отражение результатов выражений
Генерация определений классов

Основные категории типов
Составные категории типов
Свойства типов ➜
Отношения типов
 
Типы и запросы отражения
Запросы отражения
Запросы макета отражения
Свойства типов
Запросы свойств типа
 
Определено в заголовке <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
проверяет, создаётся ли отражаемая сущность путём подстановки аргументов шаблона в шаблон
(функция)