◐ Shell
clean mode source ↗

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 = 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]