std::meta::add_lvalue_reference, std::meta::add_rvalue_reference
Определён в заголовочном файле <meta> | ||
|---|---|---|
consteval std::meta::info add_lvalue_reference( std::meta::info r ); | (1) | (начиная с C++26) |
consteval std::meta::info add_rvalue_reference( std::meta::info r ); | (2) | (начиная с C++26) |
Возвращает отражение типа lvalue- или rvalue-ссылки для базового типа T, представленного отражением r.
1) Если
T — это тип функции без cv- или ref-квалификатора либо объектный тип, возвращает ^^T&. Если T — rvalue-ссылка на тип U, возвращает ^^U&. В противном случае возвращает ^^T.
Эквивалентно
return std::meta::dealias(std::add_lvalue_reference_t<T>);.
2) Если
T — это тип функции без cv- или ref-квалификатора либо объектный тип, возвращает ^^T&&, иначе возвращает ^^T.
Эквивалентно
return std::meta::dealias(std::add_rvalue_reference_t<T>);.Параметры
| r | - | значение отражения |
Возвращаемое значение
Отражение типа, представленного r, с соответствующим добавлением lvalue- или rvalue-ссылки.
Исключения
Выбрасывает std::meta::exception, если r не представляет тип или псевдоним типа.
Примечания
Эти преобразования типов учитывают правила свёртывания ссылок:
-
add_lvalue_reference(^^T&)— это^^T&, -
add_lvalue_reference(^^T&&)— это^^T&, -
add_rvalue_reference(^^T&)— это^^T&, -
add_rvalue_reference(^^T&&)— это^^T&&.
Главное отличие от непосредственного использования ^^T& состоит в том, что add_lvalue_reference(^^void) — это ^^void, тогда как ^^void& приводит к ошибке компиляции.
Пример
#include <meta>
static_assert
(""
&& std::meta::is_lvalue_reference_type(add_lvalue_reference(^^int))
&& std::meta::is_rvalue_reference_type(add_rvalue_reference(^^int))
&& !std::meta::is_lvalue_reference_type(add_rvalue_reference(^^void))
&& (add_lvalue_reference(^^int) == ^^int&)
&& (add_rvalue_reference(^^int) == ^^int&&)
&& (add_lvalue_reference(^^void) == ^^void)
);
int main() {}
См. также
|
(C++26) | проверяет, представляет ли отражение lvalue- или rvalue-ссылку (функция) |
|
(C++26) | проверяет, представляет ли отражение lvalue-ссылку (функция) |
|
(C++26) | проверяет, представляет ли отражение rvalue-ссылку (функция) |
|
(C++26)(C++26) | проверяет, является ли отражённая сущность функцией-членом с ref-квалификатором (функция) |
|
(C++26) | удаляет ссылку из отражённого типа (функция) |
|
(C++26) | объединяет meta::remove_cv и meta::remove_reference (функция) |
|
(C++11)(C++11) | добавляет к заданному типу lvalue- или rvalue-ссылку (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/add_lvalue_reference