std::reference_converts_from_temporary
Определён в заголовочном файле <type_traits> | ||
|---|---|---|
template< class T, class U > struct reference_converts_from_temporary; | (начиная с C++23) |
Пусть V равно std::remove_cv_t<U>, если U является скалярным типом или cv void, и U в противном случае. Если T является ссылочным типом и для гипотетического выражения e, такого что decltype(e) является V, определение переменной T ref = e; корректно и привязывает временный объект к ref, то предоставляет константу-член value, равную true. В противном случае value равно false.
Если T является типом ссылки lvalue на объектный тип с квалификатором const, но без квалификатора volatile, или типом ссылки rvalue, то и std::remove_reference_t<T>, и std::remove_reference_t<U> должны быть полными типами, cv void или массивами неизвестной длины; в противном случае поведение не определено.
Если инстанцирование приведённого выше шаблона прямо или косвенно зависит от неполного типа и это инстанцирование могло бы дать другой результат, если бы этот тип гипотетически был полным, поведение не определено.
Если программа добавляет специализации для std::reference_converts_from_temporary или std::reference_converts_from_temporary_v, поведение не определено.
Шаблон переменной-помощника
template< class T, class U >
constexpr bool reference_converts_from_temporary_v =
std::reference_converts_from_temporary<T, U>::value;
| (начиная с C++23) |
Унаследовано от std::integral_constant
Константы-члены
|
value
[static] |
true, если T является ссылочным типом, значение типа U может быть привязано к T при копирующей инициализации и к ссылке привязывается временный объект; в противном случае false (открытая статическая константа-член) |
Функции-члены
|
operator bool | преобразует объект в bool, возвращает value (открытая функция-член) |
|
operator()
(C++14) | возвращает value (открытая функция-член) |
Типы-члены
| Тип | Определение |
|---|---|
value_type | bool |
type | std::integral_constant<bool,value> |
Примечания
std::reference_converts_from_temporary можно использовать для отсеивания некоторых случаев, которые всегда приводят к висячим ссылкам.
Пример
#include <type_traits>
int main() {}
static_assert(
std::reference_converts_from_temporary_v<int&&, int> == true &&
std::reference_converts_from_temporary_v<const int&, int> == true &&
std::reference_converts_from_temporary_v<int&&, int&&> == false &&
std::reference_converts_from_temporary_v<const int&, int&&> == false &&
std::reference_converts_from_temporary_v<int&&, long&&> == true &&
std::reference_converts_from_temporary_v<int&&, long> == true);
См. также
|
(C++11)(C++20) | проверяет, можно ли преобразовать один тип в другой (шаблон класса) |
|
(C++17)(C++23) | вызывает любой объект Callable с заданными аргументами и позволяет указать тип возвращаемого значения(начиная с C++23) (шаблон функции) |
|
(C++11) | привязывает один или несколько аргументов к функциональному объекту (шаблон функции) |
|
(C++17) | вызывает переданный функциональный объект с аргументами, хранящимися в одном или нескольких variant (шаблон функции) |
создаёт новый экземпляр std::function (открытая функция-член std::function<R(Args...)>) |
|
создаёт новый объект std::move_only_function (открытая функция-член std::move_only_function) |
|
| создаёт объект задачи (открытая функция-член std::packaged_task<R(Args...)>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/reference_converts_from_temporary