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
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <iterator>
|
||
template< class T > using iter_value_t = /* véase más abajo */; |
(1) | (desde C++20) |
template< /*desreferenciable*/ T > using iter_reference_t = decltype(*std::declval<T&>()); |
(2) | (desde C++20) |
template< std::indirectly_readable T > using iter_const_reference_t = std::common_reference_t<const std::iter_value_t<T>&&, std::iter_reference_t<T>>; |
(3) | (desde C++23) |
template< class T > using iter_difference_t = /* véase más abajo */; |
(4) | (desde C++20) |
template< /*desreferenciable*/ T> requires /* véase más abajo */ using iter_rvalue_reference_t = decltype(ranges::iter_move(std::declval<T&>())); |
(5) | (desde C++20) |
template< std::indirectly_readable T > using iter_common_reference_t = std::common_reference_t<std::iter_reference_t<T>, /*indirect-value-t*/<T>>; |
(6) | (desde C++20) |
| Plantillas auxiliares |
||
template< class T > concept /*desreferenciable*/ = /* véase más abajo */; |
(7) | (solo de exposición*) |
template< std::indirectly_readable T > using /*indirect-value-t*/ = /* véase más abajo */; |
(8) | (solo de exposición*) |
Calcula los tipos asociados de un iterador.
1) Calcula el tipo valor de
T.
- Si
std::iterator_traits<std::remove_cvref_t<T>>no está especializado, entoncesstd::iter_value_t<T>esstd::indirectly_readable_traits<std::remove_cvref_t<T>>::value_type. - De lo contrario, es
std::iterator_traits<std::remove_cvref_t<T>>::value_type.
2) Calcula el tipo referencia de
T.3) Calcula el tipo referencia constante de
T.4) Calcula el tipo diferencia de
T.
- Si
std::iterator_traits<std::remove_cvref_t<T>>no está especializado, entoncesstd::iter_difference_t<T>esstd::incrementable_traits<std::remove_cvref_t<T>>::difference_type. - De lo contrario, es
std::iterator_traits<std::remove_cvref_t<T>>::difference_type.
5) Calcula el tipo referencia r-valor de
T. La restricción de esta plantilla de alias se cumple si y solo si la expresión ranges::iter_move(std::declval<T&>()) es válida y tiene un tipo referenciable.6) Calcula el tipo referencia común de
T. Este es el tipo de referencia común entre su tipo referencia y una referencia l-valor a su tipo valor.7) El concepto de solo exposición
dereferenceable se satisface si y solo si la expresión *std::declval<T&>() es válida y tiene un tipo referenciable.8) La plantilla de alias de solo exposición
indirect-value-t denota lo siguiente:
std::invoke_result_t<Proj&, /*indirect-value-t*/<I>>siTes igual questd::projected<I, Proj>para algunos tiposIyProj.- De lo contrario,
std::iter_value_t<T>&.
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| P2609R3 | C++20 | std::iter_common_reference_t se definía en términos de std::iter_value_t<T>&,que manejaba incorrectamente los tipos std::projected que se proyectan en tipos referencia r-valor. |
Se define en términos de/*indirect-value-t*/<T>para manejar dichos casos. |
Véase también
(C++20) |
Especifica que un tipo puede leerse indirectamente aplicando el operador *. (concepto) |
(C++20) |
especifica que un tipo semiregular se puede incrementar con operadores de pre-incremento y pos-incremento. (concepto) |
Calcula el tipo del valor de un tipo indirectly_readable. (plantilla de clase) | |
Calcula el tipo diferencia de un tipo weakly_incrementable. (plantilla de clase) | |
| Proporciona una interfaz uniforme para las propiedades de un iterador. (plantilla de clase) | |
| Obtiene los tipos asociados de un rango. (plantilla de alias) | |
| Obtiene los tipos referencia de un rango. (plantilla de alias) | |
(C++20)(C++20)(C++20) |
Obtiene el tamaño, la diferencia y los tipos valor de un rango. (plantilla de alias) |