Espacios de nombres
Variantes
Acciones

std::tuple_element<std::ranges::subrange>

De cppreference.com
< cpp‎ | ranges‎ | subrange
 
 
Biblioteca de rangos
Adaptadores de rangos
 
std::ranges::subrange
Funciones miembro
Observadores
Operaciones de iteradores
Guías de deducción
Funciones no miembro
(C++20)
Tipos auxiliares
(C++20)
tuple_element
(C++20)
 
Definido en el archivo de encabezado <ranges>
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<0, ranges::subrange<I, S, K>>;
(1) (desde C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<0, const ranges::subrange<I, S, K>>;
(2) (desde C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<1, ranges::subrange<I, S, K>>;
(3) (desde C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<1, const ranges::subrange<I, S, K>>;
(4) (desde C++20)

Las especializaciones parciales de std::tuple_element para std::ranges::subrange proporcionan acceso en tiempo de compilación al tipo iterador o tipo centinela de un subrange, usando una sintaxis similar a una tupla. Se proporcionan para apoyo de vínculos estructurados.

1-2) Obtiene el tipo iterador, es decir, I.
3-4) Obtiene el tipo dentinela, es decir, S.

Contenido

[editar] Tipos miembro

Tipo miembro Definición
type (1-2) I
(3-4) S

[editar] Notas

Como las funciones get para subrange devuelven iteradores y centinelas por valor, no se añade un calificador const a los tipos resultado cuando el subrange está calificado const (pero no calificado volatile).

Si el subrange está calificado volatile, los tipos resultado también están calificados volatile porque se utiliza la especialización parcial para tipos volatile o const volatile. Tal uso está obsoleto.

[editar] Ejemplo

#include <iterator>
#include <list>
#include <ranges>
#include <type_traits>
 
int main()
{
    std::list<int> list{3, 1, 4, 1, 5, 9, 2, 6};
 
    std::ranges::subrange subrange{
        std::counted_iterator{std::begin(list), 4},
        std::default_sentinel
    };
 
    static_assert(
        std::is_same_v<
            std::tuple_element_t<0, decltype(subrange)>,
            // tipos definidos por la implementación:
            std::counted_iterator<std::_List_iterator<int>>
            >);
 
    static_assert(
        std::is_same_v<
            std::tuple_element_t<1, decltype(subrange)>,
            std::default_sentinel_t
            >);
}


[editar] Véase también

Vínculo estructurado (C++17) Vincula los nombres especificados a subobjetos o elementos de una tupla del inicializador. [editar]
Obtiene los tipos de elementos de un tipo similar a una tupla.
(plantilla de clase) [editar]
Obtiene el número de componentes de un subrango (std::ranges::subrange).
(especialización de plantilla de clase) [editar]