std:: indirectly_readable_traits
|
Definiert im Header
<iterator>
|
||
|
template
<
class
I
>
struct indirectly_readable_traits { } ; |
(1) | (seit C++20) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
T
*
>
:
|
(2) | (seit C++20) |
|
template
<
class
I
>
requires
std::
is_array_v
<
I
>
|
(3) | (seit C++20) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
const
T
>
:
|
(4) | (seit C++20) |
|
template
<
/* has-member-value-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(5) | (seit C++20) |
|
template
<
/* has-member-element-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(6) | (seit C++20) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
|
(7) | (seit C++20) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
&&
|
(8) | (seit C++20) |
|
Hilfsklassen und Konzepte
|
||
|
template
<
class
>
struct /* Bedingungs-Wert-Typ */ { } ; |
(1) | ( Nur zur Darstellung* ) |
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(2) | ( Nur zur Darstellung* ) |
|
template
<
class
T
>
concept
/* hat-Mitglied-Werttyp */
=
|
(3) | ( nur zur Darstellung* ) |
|
template
<
class
T
>
concept
/* hat-Mitglied-Element-Typ */
=
|
(4) | ( Nur zur Darstellung* ) |
Berechnet den assoziierten Werttyp des Template-Arguments. Falls der assoziierte Werttyp existiert, wird er durch den geschachtelten Typ
value_type
repräsentiert, andernfalls ist
value_type
nicht definiert. Ein Programm kann
indirectly_readable_traits
für einen
programmdefinierten Typ
spezialisieren.
Inhaltsverzeichnis |
Erklärung
Die oben genannten Spezialisierungen können informell wie folgt beschrieben werden.
Gegeben einen Typ
T
, wird sein assoziierter Werttyp
V
wie folgt bestimmt:
-
Wenn
Tconst-qualifiziert ist,Vder zugehörige Werttyp des const-unqualifiziertenTist. -
Andernfalls, wenn
Tein Array-Typ ist,Vder cv-unqualifizierte Array-Elementtyp ist. -
Andernfalls wird zunächst ein bedingter Werttyp
Cbestimmt:
-
-
Falls
Tein Zeigertyp ist,Cist der gezeigte Typ. -
Andernfalls, falls
Tdie geschachtelten Typenvalue_typeundelement_typebesitzt:
-
-
Falls diese Typen identisch sind (ohne Berücksichtigung von CV-Qualifizierern),
Cisttypename T::value_type. -
Andernfalls ist
Cundefiniert.
-
Falls diese Typen identisch sind (ohne Berücksichtigung von CV-Qualifizierern),
-
Andernfalls, falls
Tden geschachtelten Typvalue_typeaber nichtelement_typebesitzt,Cisttypename T::value_type. -
Andernfalls, falls
Tden geschachtelten Typelement_typeaber nichtvalue_typebesitzt,Cisttypename T::element_type. -
Andernfalls ist
Cundefiniert.
-
Falls
-
Dann wird
VausCwie folgt bestimmt:-
Falls
Cundefiniert ist, oderCkein Objekttyp ist,Vist undefiniert. -
Andernfalls ist
VCV-unqualifiziertesC.
-
Falls
Hinweise
value_type
ist für die Verwendung mit
indirectly_readable
-Typen wie Iteratoren vorgesehen. Es ist nicht für die Verwendung mit Ranges gedacht.
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3446 | C++20 |
Spezialisierungen
(5,6)
waren mehrdeutig für Typen mit
sowohl
value_type
als auch
element_type
verschachtelten Typen
|
Spezialisierung (8) hinzugefügt |
| LWG 3541 | C++20 |
LWG 3446 führte schwerwiegenden Fehler für mehrdeutige Fälle ein
bei denen
value_type
und
element_type
unterschiedlich sind
|
Spezialisierung (7) hinzugefügt |
Siehe auch
|
(C++20)
|
spezifiziert, dass ein Typ indirekt lesbar durch Anwendung des Operators
*
ist
(Konzept) |
|
(C++20)
(C++20)
(C++23)
(C++20)
(C++20)
(C++20)
|
berechnet die assoziierten Typen eines Iterators
(Alias-Template) |
|
bietet eine einheitliche Schnittstelle zu den Eigenschaften eines Iterators
(Klassen-Template) |