std:: iter_value_t, std:: iter_reference_t, std:: iter_const_reference_t, std:: iter_difference_t, std:: iter_rvalue_reference_t, std:: iter_common_reference_t
|
Definido en el encabezado
<iterator>
|
||
|
template
<
class
T
>
using iter_value_t = /* ver más abajo */ ; |
(1) | (desde C++20) |
|
template
<
/*dereferenceable*/
T
>
using iter_reference_t = decltype ( * std:: declval < T & > ( ) ) ; |
(2) | (desde C++20) |
|
template
<
std::
indirectly_readable
T
>
using
iter_const_reference_t
=
|
(3) | (desde C++23) |
|
template
<
class
T
>
using iter_difference_t = /* ver más abajo */ ; |
(4) | (desde C++20) |
|
template
<
/*dereferenceable*/
T
>
requires
/* ver abajo */
|
(5) | (desde C++20) |
|
template
<
std::
indirectly_readable
T
>
using
iter_common_reference_t
=
|
(6) | (desde C++20) |
|
Plantillas auxiliares
|
||
|
template
<
class
T
>
concept /*dereferenceable*/ = /* ver más abajo */ ; |
(7) | ( solo para exposición* ) |
|
template
<
std::
indirectly_readable
T
>
using /*indirect-value-t*/ = /* ver más abajo */ ; |
(8) | ( solo para exposición* ) |
Calcule los tipos asociados de un iterador.
T
.
- Si std:: iterator_traits < std:: remove_cvref_t < T >> no está especializado, entonces std :: iter_value_t < T > es std:: indirectly_readable_traits < std:: remove_cvref_t < T >> :: value_type .
- En caso contrario, es std:: iterator_traits < std:: remove_cvref_t < T >> :: value_type .
T
.
T
.
T
.
- Si std:: iterator_traits < std:: remove_cvref_t < T >> no está especializado, entonces std :: iter_difference_t < T > es std:: incrementable_traits < std:: remove_cvref_t < T >> :: difference_type .
- De lo contrario, es std:: iterator_traits < std:: remove_cvref_t < T >> :: difference_type .
T
. La restricción en este alias de plantilla se satisface si y solo si la expresión
ranges::
iter_move
(
std::
declval
<
T
&
>
(
)
)
es válida y tiene un tipo referenciable.
T
. Este es el tipo de referencia común entre su tipo de referencia y una referencia de lvalue a su tipo de valor.
dereferenceable
se satisface si y solo si la expresión
*
std::
declval
<
T
&
>
(
)
es válida y tiene un
tipo referenciable
.
indirect-value-t
denota lo siguiente:
-
std::
invoke_result_t
<
Proj
&
,
/*indirect-value-t*/
<
I
>>
si
Tes igual a std :: projected < I, Proj > para algunos tiposIyProj. - En caso contrario, std :: iter_value_t < T > & .
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P2609R3 | C++20 |
std::iter_common_reference_t
se definía en términos
de std :: iter_value_t < T > & lo cual manejaba incorrectamente std::projected tipos que proyectan en tipos de referencia a rvalue |
definido en términos de
/*indirect-value-t*/ < T > para manejar dichos casos |
Véase también
|
(C++20)
|
especifica que un tipo es indirectamente legible aplicando el operador
*
(concepto) |
|
(C++20)
|
especifica que un tipo
semiregular
puede incrementarse con operadores de pre- y post-incremento
(concepto) |
|
(C++20)
|
calcula el tipo de valor de un tipo
indirectly_readable
(plantilla de clase) |
|
(C++20)
|
calcula el tipo de diferencia de un tipo
weakly_incrementable
(plantilla de clase) |
|
proporciona una interfaz uniforme para las propiedades de un iterador
(plantilla de clase) |
|
|
(C++20)
(C++23)
(C++20)
(C++23)
|
obtiene los tipos de iterador y centinela de un rango
(plantilla de alias) |
|
(C++20)
(C++23)
(C++20)
(C++20)
|
obtiene los tipos de referencia de un rango
(plantilla de alias) |
|
(C++20)
(C++20)
(C++20)
|
obtiene los tipos de tamaño, diferencia y valor de un rango
(plantilla de alias) |