std:: reference_constructs_from_temporary
|
Определено в заголовочном файле
<type_traits>
|
||
|
template
<
class
T,
class
U
>
struct reference_constructs_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_constructs_from_temporary
или
std::reference_constructs_from_temporary_v
, поведение не определено.
Содержание |
Шаблон вспомогательной переменной
|
template
<
class
T,
class
U
>
inline
constexpr
bool
reference_constructs_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_constructs_from_temporary
может использоваться для отклонения некоторых случаев, которые всегда приводят к созданию висячих ссылок.
Также возможно использовать список инициализации членов для отклонения привязки временного объекта к ссылке, если компилятор реализовал CWG1696 .
Пример
#include <type_traits> static_assert(std::reference_constructs_from_temporary_v<int&&, int> == true); static_assert(std::reference_constructs_from_temporary_v<const int&, int> == true); static_assert(std::reference_constructs_from_temporary_v<int&&, int&&> == false); static_assert(std::reference_constructs_from_temporary_v<const int&, int&&> == false); static_assert(std::reference_constructs_from_temporary_v<int&&, long&&> == true); static_assert(std::reference_constructs_from_temporary_v<int&&, long> == true); int main() {}
Смотрите также
|
(C++11)
(C++11)
(C++11)
|
проверяет, имеет ли тип конструктор для определенных аргументов
(шаблон класса) |
создает новый
tuple
(публичная функция-член
std::tuple<Types...>
)
|
|
создает новый
pair
(публичная функция-член
std::pair<T1,T2>
)
|
|
|
(C++17)
|
создает объект с кортежем аргументов
(шаблон функции) |