std:: reference_constructs_from_temporary
|
Definido en el encabezado
<type_traits>
|
||
|
template
<
class
T,
class
U
>
struct reference_constructs_from_temporary ; |
(desde C++23) | |
Sea
V
igual a
std::
remove_cv_t
<
U
>
si
U
es un tipo escalar o
cv
void
, o
U
en caso contrario. Si
T
es un tipo referencia, y dada una expresión hipotética
e
tal que
decltype
(
e
)
es
V
, la definición de variable
T ref
(
e
)
;
está bien formada y
enlaza un objeto temporal
a
ref
, entonces proporciona la constante miembro
value
igual a
true
. De lo contrario,
value
es
false
.
Si
T
es un tipo de referencia lvalue a un tipo de objeto calificado const pero no volatile o un tipo de referencia rvalue, tanto
std::
remove_reference_t
<
T
>
como
std::
remove_reference_t
<
U
>
deberán ser
tipos completos
,
cv
void
, o
arrays de límite desconocido
; de lo contrario el comportamiento es indefinido.
Si una instanciación de una plantilla anterior depende, directa o indirectamente, de un tipo incompleto, y esa instanciación podría producir un resultado diferente si ese tipo se completara hipotéticamente, el comportamiento no está definido.
Si el programa añade especializaciones para
std::reference_constructs_from_temporary
o
std::reference_constructs_from_temporary_v
, el comportamiento es indefinido.
Contenidos |
Plantilla de variable auxiliar
|
template
<
class
T,
class
U
>
inline
constexpr
bool
reference_constructs_from_temporary_v
=
|
(desde C++23) | |
Heredado de std:: integral_constant
Constantes miembro
|
value
[static]
|
true
si
T
es un tipo referencia, un valor
U
puede enlazarse a
T
en inicialización directa, y un objeto temporal se enlazaría a la referencia,
false
en caso contrario
(constante miembro pública estática) |
Funciones miembro
|
operator bool
|
convierte el objeto a
bool
, devuelve
value
(función miembro pública) |
|
operator()
(C++14)
|
devuelve
value
(función miembro pública) |
Tipos miembro
| Tipo | Definición |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Notas
std::reference_constructs_from_temporary
puede utilizarse para rechazar algunos casos que siempre producen referencias colgantes.
También es posible utilizar la lista de inicialización de miembros para rechazar la vinculación de un objeto temporal a una referencia si el compilador ha implementado CWG1696 .
Ejemplo
#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() {}
Véase también
|
(C++11)
(C++11)
(C++11)
|
verifica si un tipo tiene un constructor para argumentos específicos
(plantilla de clase) |
construye un nuevo
tuple
(función miembro pública de
std::tuple<Types...>
)
|
|
construye un nuevo
pair
(función miembro pública de
std::pair<T1,T2>
)
|
|
|
(C++17)
|
construye un objeto con una tupla de argumentos
(plantilla de función) |