std:: iter_value_t, std:: iter_reference_t, std:: iter_const_reference_t, std:: iter_difference_t, std:: iter_rvalue_reference_t, std:: iter_common_reference_t
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
class
T
>
using iter_value_t = /* voir ci-dessous */ ; |
(1) | (depuis C++20) |
|
template
<
/*déréférençable*/
T
>
using iter_reference_t = decltype ( * std:: declval < T & > ( ) ) ; |
(2) | (depuis C++20) |
|
template
<
std::
indirectly_readable
T
>
using
iter_const_reference_t
=
|
(3) | (depuis C++23) |
|
template
<
class
T
>
using iter_difference_t = /* voir ci-dessous */ ; |
(4) | (depuis C++20) |
|
template
<
/*dereferenceable*/
T
>
requires
/* voir ci-dessous */
|
(5) | (depuis C++20) |
|
template
<
std::
indirectly_readable
T
>
using
iter_common_reference_t
=
|
(6) | (depuis C++20) |
|
Modèles d'assistance
|
||
|
template
<
class
T
>
concept /*dereferenceable*/ = /* voir ci-dessous */ ; |
(7) | ( exposition uniquement* ) |
|
template
<
std::
indirectly_readable
T
>
using /*indirect-value-t*/ = /* voir ci-dessous */ ; |
(8) | ( exposition uniquement* ) |
Calcule les types associés d'un itérateur.
T
.
- Si std:: iterator_traits < std:: remove_cvref_t < T >> n'est pas spécialisé, alors std :: iter_value_t < T > est std:: indirectly_readable_traits < std:: remove_cvref_t < T >> :: value_type .
- Sinon, c'est std:: iterator_traits < std:: remove_cvref_t < T >> :: value_type .
T
.
T
.
T
.
- Si std:: iterator_traits < std:: remove_cvref_t < T >> n'est pas spécialisé, alors std :: iter_difference_t < T > est std:: incrementable_traits < std:: remove_cvref_t < T >> :: difference_type .
- Sinon, c'est std:: iterator_traits < std:: remove_cvref_t < T >> :: difference_type .
T
. La contrainte sur cet alias template est satisfaite si et seulement si l'expression
ranges::
iter_move
(
std::
declval
<
T
&
>
(
)
)
est valide et a un type référençable.
T
. Ceci est le type de référence commun entre son type de référence et une référence lvalue à son type de valeur.
dereferenceable
est satisfait si et seulement si l'expression
*
std::
declval
<
T
&
>
(
)
est valide et possède un
type référençable
.
indirect-value-t
dénote ce qui suit :
-
std::
invoke_result_t
<
Proj
&
,
/*indirect-value-t*/
<
I
>>
si
Test identique à std :: projected < I, Proj > pour certains typesIetProj. - Sinon, std :: iter_value_t < T > & .
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2609R3 | C++20 |
std::iter_common_reference_t
était défini en termes
de std :: iter_value_t < T > & ce qui gérait incorrectement std::projected les types qui projettent vers des types de référence rvalue |
défini en termes de
/*indirect-value-t*/ < T > pour gérer ces cas |
Voir aussi
|
(C++20)
|
spécifie qu'un type est indirectement lisible en appliquant l'opérateur
*
(concept) |
|
(C++20)
|
spécifie qu'un type
semiregular
peut être incrémenté avec les opérateurs de pré-incrémentation et post-incrémentation
(concept) |
|
(C++20)
|
calcule le type de valeur d'un type
indirectly_readable
(modèle de classe) |
|
(C++20)
|
calcule le type de différence d'un type
weakly_incrementable
(modèle de classe) |
|
fournit une interface uniforme aux propriétés d'un itérateur
(modèle de classe) |
|
|
(C++20)
(C++23)
(C++20)
(C++23)
|
obtient les types d'itérateur et de sentinelle d'une plage
(modèle d'alias) |
|
(C++20)
(C++23)
(C++20)
(C++20)
|
obtient les types de référence d'une plage
(modèle d'alias) |
|
(C++20)
(C++20)
(C++20)
|
obtient les types de taille, de différence et de valeur d'une plage
(modèle d'alias) |