Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
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 tipo tupla. Se proporcionan para soportar el enlace estructurado.

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

Contenidos

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)