Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Défini dans l'en-tête <ranges>
template < class I, class S, ranges:: subrange_kind K >
struct tuple_element < 0 , ranges:: subrange < I, S, K >> ;
(1) (depuis C++20)
template < class I, class S, ranges:: subrange_kind K >
struct tuple_element < 0 , const ranges:: subrange < I, S, K >> ;
(2) (depuis C++20)
template < class I, class S, ranges:: subrange_kind K >
struct tuple_element < 1 , ranges:: subrange < I, S, K >> ;
(3) (depuis C++20)
template < class I, class S, ranges:: subrange_kind K >
struct tuple_element < 1 , const ranges:: subrange < I, S, K >> ;
(4) (depuis C++20)

Les spécialisations partielles de std::tuple_element pour std::ranges::subrange fournissent un accès à la compilation au type d'itérateur ou de sentinelle d'un subrange , en utilisant une syntaxe de type tuple. Elles sont fournies pour la prise en charge de la liaison structurée.

1,2) Obtient le type d'itérateur, c'est-à-dire I .
3,4) Obtient le type sentinelle, c'est-à-dire S .

Table des matières

Types membres

Type de membre Définition
type (1,2) I
(3,4) S

Notes

Comme les fonctions get pour subrange retournent des itérateurs et des sentinelles par valeur, le qualificatif const n'est pas ajouté aux types de résultat lorsque le subrange est qualifié const (mais pas qualifié volatile).

Si le subrange est qualifié volatile, les types de résultat sont également qualifiés volatile car les spécialisations partielles pour les types volatile ou const volatile sont utilisées. Une telle utilisation est dépréciée.

Exemple

#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)>,
            // type défini par l'implémentation :
            std::counted_iterator<std::_List_iterator<int>>
            >);
    static_assert(
        std::is_same_v<
            std::tuple_element_t<1, decltype(subrange)>,
            std::default_sentinel_t
            >);
}

Voir aussi

Liaison structurée (C++17) lie les noms spécifiés aux sous-objets ou éléments de tuple de l'initialiseur
obtient les types d'éléments d'un type de type tuple
(modèle de classe)
obtient la taille d'un std::ranges::subrange
(spécialisation de modèle de classe)