Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
Bibliothèque de plages (ranges)
Adaptateurs de plages
 
 
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 similaire à celle d'un tuple. Elles sont fournies pour le support des liaisons structurées.

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

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)