std::meta::decay
Определён в заголовке <meta> | ||
|---|---|---|
consteval std::meta::info decay( std::meta::info r ); | (начиная с C++26) |
Выполняет преобразования типов, эквивалентные тем, которые выполняются при передаче аргументов функции по значению.
Пусть T — тип, представленный r. Тогда:
- Если
T— «массив U» или ссылка на него, результат эквивалентенreturn std::meta::dealias(^^U*);. - Иначе, если
T— тип функцииFили ссылка на него, результат эквивалентенreturn std::meta::dealias(^^std::add_pointer_t<F>);. - В противном случае результат эквивалентен
return std::meta::dealias(^^std::remove_cvref_t<T>);.
В любом случае вызов этой функции эквивалентен return std::meta::dealias(std::decay_t<T>).
Параметры
| r | - | значение отражения |
Возвращаемое значение
Отражение типа T, полученного после применения преобразований decay.
Исключения
Выбрасывает std::meta::exception, если r не представляет тип или псевдоним типа.
Пример
#include <meta>
static_assert
(""
&& (decay(^^int) == ^^int)
&& (decay(^^int) != ^^float)
&& (decay(^^int&) == ^^int)
&& (decay(^^int&&) == ^^int)
&& (decay(^^const int&) == ^^int)
&& (decay(^^int[2]) == ^^int*)
&& (decay(^^int[4][2]) != ^^int*)
&& (decay(^^int[4][2]) != ^^int**)
&& (decay(^^int[4][2]) == ^^int(*)[2])
&& (decay(^^int(int)) == ^^int(*)(int))
);
int main() {}
См. также
| Неявные преобразования | преобразования массива в указатель, функции в указатель, lvalue в rvalue |
|
(C++26) | объединяет meta::remove_cv и meta::remove_reference (функция) |
|
(C++26)(C++26)(C++26) | удаляет квалификаторы const и/или volatile из отражённого типа (функция) |
|
(C++26) | удаляет ссылку из отражённого типа (функция) |
|
(C++11) | применяет преобразования типа, выполняемые при передаче аргумента функции по значению (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/decay