Espacios de nombres
Variantes

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
 
 
Biblioteca de iteradores
Conceptos de iteradores
Primitivas de iteradores
Conceptos de algoritmos y servicios
Conceptos invocables indirectos
Requerimientos comunes de algoritmos
Servicios
Adaptadores de iteradores
Iteradores de flujos
Puntos de personalización de iteradores
Operaciones de iteradores
(C++11)
(C++11)
Acceso a rangos
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
<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, 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 tipos I y Proj.
  • 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

Especifica que un tipo puede leerse indirectamente aplicando el operador *.
(concepto) [editar]
especifica que un tipo semiregular se puede incrementar con operadores de pre-incremento y pos-incremento.
(concepto) [editar]
Calcula el tipo del valor de un tipo indirectly_readable.
(plantilla de clase) [editar]
Calcula el tipo diferencia de un tipo weakly_incrementable.
(plantilla de clase) [editar]
Proporciona una interfaz uniforme para las propiedades de un iterador.
(plantilla de clase) [editar]
Obtiene los tipos asociados de un rango.
(plantilla de alias) [editar]
Obtiene los tipos referencia de un rango.
(plantilla de alias) [editar]
Obtiene el tamaño, la diferencia y los tipos valor de un rango.
(plantilla de alias) [editar]