Namespaces
Variants

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

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
iter_value_t iter_difference_t iter_reference_t iter_const_reference_t iter_rvalue_reference_t iter_common_reference_t
(C++20) (C++20) (C++20) (C++23) (C++20) (C++20)
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
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 =
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 = /* ver más abajo */ ;
(4) (desde C++20)
template < /*dereferenceable*/ T >

requires /* ver 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 > ,

/*tipo-valor-indirecto*/ < 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.

1) Calcula el tipo de valor de T .
2) Calcula el tipo de referencia de T .
3) Calcula el const reference type de T .
4) Calcula el tipo de diferencia de T .
5) Calcula el tipo de referencia de rvalue de 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.
6) Calcula el tipo de referencia común de T . Este es el tipo de referencia común entre su tipo de referencia y una referencia de lvalue a su tipo de valor.
7) El concepto de exposición única 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 solo para exposición indirect-value-t denota lo siguiente:
  • std:: invoke_result_t < Proj & , /*indirect-value-t*/ < I >> si T es igual a std :: projected < I, Proj > para algunos tipos I y Proj .
  • 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

especifica que un tipo es indirectamente legible aplicando el operador *
(concepto)
especifica que un tipo semiregular puede incrementarse con operadores de pre- y post-incremento
(concepto)
calcula el tipo de valor de un tipo indirectly_readable
(plantilla de clase)
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)
obtiene los tipos de iterador y centinela de un rango
(plantilla de alias)
obtiene los tipos de referencia de un rango
(plantilla de alias)
obtiene los tipos de tamaño, diferencia y valor de un rango
(plantilla de alias)