std:: indirectly_readable_traits
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
class
I
>
struct indirectly_readable_traits { } ; |
(1) | (depuis C++20) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
T
*
>
:
|
(2) | (depuis C++20) |
|
template
<
class
I
>
requires
std::
is_array_v
<
I
>
|
(3) | (depuis C++20) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
const
T
>
:
|
(4) | (depuis C++20) |
|
template
<
/* has-member-value-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(5) | (depuis C++20) |
|
template
<
/* has-member-element-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(6) | (depuis C++20) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
|
(7) | (depuis C++20) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
&&
|
(8) | (depuis C++20) |
|
Classes et concepts auxiliaires
|
||
|
template
<
class
>
struct /* type-valeur-condition */ { } ; |
(1) | ( exposition uniquement* ) |
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(2) | ( exposition uniquement* ) |
|
template
<
class
T
>
concept
/* a-un-type-de-membre-valeur */
=
|
(3) | ( exposition uniquement* ) |
|
template
<
class
T
>
concept
/* a-un-type-element-membre */
=
|
(4) | ( exposition uniquement* ) |
Calcule le type de valeur associé de l'argument template. Si le type de valeur associé existe, il est représenté par le type imbriqué
value_type
, sinon
value_type
n'est pas défini. Un programme peut spécialiser
indirectly_readable_traits
pour un
type défini par le programme
.
Table des matières |
Explication
Les spécialisations ci-dessus peuvent être décrites de manière informelle comme suit.
Étant donné un type
T
, son type de valeur associé
V
est déterminé comme suit :
-
Si
Test qualifié const,Vest le type de valeur associé deTnon qualifié const. -
Sinon, si
Test un type tableau,Vest le type d'élément du tableau non qualifié cv. -
Sinon, un type de valeur conditionnel
Cest d'abord déterminé :
-
-
Si
Test un type pointeur,Cest le type pointé. -
Sinon, si
Ta les types imbriquésvalue_typeetelement_type:
-
-
Si ces types sont identiques (sans considération des qualificateurs cv),
Cesttypename T::value_type. -
Sinon,
Cest indéfini.
-
Si ces types sont identiques (sans considération des qualificateurs cv),
-
Sinon, si
Ta le type imbriquévalue_typemais paselement_type,Cesttypename T::value_type. -
Sinon, si
Ta le type imbriquéelement_typemais pasvalue_type,Cesttypename T::element_type. -
Sinon,
Cest indéfini.
-
Si
-
Ensuite
Vest déterminé à partir deCcomme suit :-
Si
Cest indéfini, ouCn'est pas un type objet ,Vest indéfini. -
Sinon,
VestCsans qualificateurs cv.
-
Si
Notes
value_type
est destiné à être utilisé avec des types
indirectly_readable
tels que les itérateurs. Il n'est pas destiné à être utilisé avec des plages.
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
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é |
|---|---|---|---|
| LWG 3446 | C++20 |
les spécialisations
(5,6)
étaient ambiguës pour les types ayant
à la fois
value_type
et
element_type
comme types imbriqués
|
spécialisation ajoutée (8) |
| LWG 3541 | C++20 |
LWG 3446 introduisait une erreur irrécupérable pour les cas ambigus
où
value_type
et
element_type
sont différents
|
spécialisation ajoutée (7) |
Voir aussi
|
(C++20)
|
spécifie qu'un type est indirectement lisible en appliquant l'opérateur
*
(concept) |
|
(C++20)
(C++20)
(C++23)
(C++20)
(C++20)
(C++20)
|
calcule les types associés d'un itérateur
(alias template) |
|
fournit une interface uniforme pour les propriétés d'un itérateur
(class template) |