Namespaces
Variants

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

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rango
 
 
Definido en el 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 de iterador o centinela de un subrange, utilizando sintaxis similar a la de una tupla. Se proporcionan para el soporte de enlace estructurado.

1,2) Obtiene el tipo de iterador, es decir, I.
3,4) Obtiene el tipo de centinela, es decir, S.

Tipos de miembros

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

Notas

Como las funciones get para subrange retornan iteradores y sentinelas por valor, const no se añade el calificador al tipo de resultado cuando el subrange está calificado como const (pero no calificado como volatile).

Si el subrange está calificado como volátil, los tipos resultantes también están calificados como volátiles porque se utilizan las especializaciones parciales para tipos volátiles o const volátiles. Este uso está obsoleto.

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)>,
            // tipo definido 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
            >);
}

Véase también

Structured binding (C++17) vincula los nombres especificados a subobjetos o elementos de tupla del inicializador
obtiene los tipos de elemento de un tipo similar a tupla
(plantilla de clase)
obtiene el tamaño de un std::ranges::subrange
(especialización de plantilla de clase)