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
>
inline
constexpr
bool
reference_converts_from_temporary_v
=
|
(начиная с C++23) | |
Наследуется от std:: integral_constant
Константы-члены
|
value
[static]
|
true
если
T
является ссылочным типом, значение
U
может быть привязано к
T
при копирующей инициализации, и временный объект будет привязан к ссылке,
false
в противном случае
(public static member constant) |
Функции-члены
|
operator bool
|
преобразует объект в
bool
, возвращает
value
(public member function) |
|
operator()
(C++14)
|
возвращает
value
(public member function) |
Типы-члены
| Тип | Определение |
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
объект с заданными аргументами
и возможностью указания возвращаемого типа
(since 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...)>
)
|