std:: tuple_element <std::ranges::subrange>
|
||||||||||||||||||||||
| Range primitives | |||||||
|
|||||||
| Range concepts | |||||||||||||||||||
|
|||||||||||||||||||
| Range factories | |||||||||
|
|||||||||
| Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||
| Helper items | |||||||||||||||||
|
|
||||||||||||||||
| Member functions | ||||
| Observers | ||||
| Iterator operations | ||||
| Deduction guides | ||||
| Non-member functions | ||||
| Helper types | ||||
|
tuple_element
<std::ranges::subrange>
|
|
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.
I
.
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 |
|
(C++11)
|
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) |