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
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 = |
(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 */ |
(5) | (desde C++20) |
template< std::indirectly_readable T > using iter_common_reference_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, entonces std::iter_value_t<T> es std::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, 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.
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>> si
T
es igual que std::projected<I, Proj> para algunos tiposI
yProj
. - De lo contrario, std::iter_value_t<T>&.
[editar] 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. |
[editar] 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) |