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
|
Definiert im Header
<iterator>
|
||
|
template
<
class
T
>
using iter_value_t = /* siehe unten */ ; |
(1) | (seit C++20) |
|
template
<
/*dereferenzierbar*/
T
>
using iter_reference_t = decltype ( * std:: declval < T & > ( ) ) ; |
(2) | (seit C++20) |
|
template
<
std::
indirectly_readable
T
>
using
iter_const_reference_t
=
|
(3) | (seit C++23) |
|
template
<
class
T
>
using iter_difference_t = /* siehe unten */ ; |
(4) | (seit C++20) |
|
template
<
/*dereferenceable*/
T
>
requires
/* siehe unten */
|
(5) | (seit C++20) |
|
template
<
std::
indirectly_readable
T
>
using
iter_common_reference_t
=
|
(6) | (seit C++20) |
|
Hilfsvorlagen
|
||
|
template
<
class
T
>
concept /*dereferenceable*/ = /* siehe unten */ ; |
(7) | ( Nur zur Darstellung* ) |
|
template
<
std::
indirectly_readable
T
>
using /*indirect-value-t*/ = /* siehe unten */ ; |
(8) | ( Nur zur Darstellung* ) |
Berechne die zugehörigen Typen eines Iterators.
T
.
- Falls std:: iterator_traits < std:: remove_cvref_t < T >> nicht spezialisiert ist, dann ist std :: iter_value_t < T > gleich std:: indirectly_readable_traits < std:: remove_cvref_t < T >> :: value_type .
- Andernfalls ist es std:: iterator_traits < std:: remove_cvref_t < T >> :: value_type .
T
.
T
.
T
.
- Falls std:: iterator_traits < std:: remove_cvref_t < T >> nicht spezialisiert ist, dann ist std :: iter_difference_t < T > gleich std:: incrementable_traits < std:: remove_cvref_t < T >> :: difference_type .
- Andernfalls ist es std:: iterator_traits < std:: remove_cvref_t < T >> :: difference_type .
T
. Die Bedingung für dieses Alias-Template ist genau dann erfüllt, wenn der Ausdruck
ranges::
iter_move
(
std::
declval
<
T
&
>
(
)
)
gültig ist und einen referenzierbaren Typ hat.
T
. Dies ist der gemeinsame Referenztyp zwischen seinem Referenztyp und einem Lvalue-Referenz auf seinen Werttyp.
dereferenceable
ist genau dann erfüllt, wenn der Ausdruck
*
std::
declval
<
T
&
>
(
)
gültig ist und einen
referenzierbaren Typ
hat.
indirect-value-t
bezeichnet Folgendes:
-
std::
invoke_result_t
<
Proj
&
,
/*indirect-value-t*/
<
I
>>
falls
Tidentisch ist mit std :: projected < I, Proj > für bestimmte TypenIundProj. - Andernfalls, std :: iter_value_t < T > & .
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| P2609R3 | C++20 |
std::iter_common_reference_t
wurde definiert in Bezug
auf std :: iter_value_t < T > & was fälschlicherweise behandelte std::projected Typen, die in Rvalue-Referenztypen projizieren |
definiert in Bezug auf
/*indirect-value-t*/ < T > um solche Fälle zu behandeln |
Siehe auch
|
(C++20)
|
spezifiziert, dass ein Typ indirekt lesbar ist durch Anwendung des Operators
*
(Konzept) |
|
(C++20)
|
spezifiziert, dass ein
semiregular
Typ mit Prä- und Post-Inkrementoperatoren inkrementiert werden kann
(Konzept) |
|
(C++20)
|
berechnet den Werttyp eines
indirectly_readable
Typs
(Klassentemplate) |
|
(C++20)
|
berechnet den Differenztyp eines
weakly_incrementable
Typs
(Klassentemplate) |
|
bietet eine einheitliche Schnittstelle zu den Eigenschaften eines Iterators
(Klassentemplate) |
|
|
(C++20)
(C++23)
(C++20)
(C++23)
|
ermittelt Iterator- und Sentinel-Typen eines Ranges
(Alias-Template) |
|
(C++20)
(C++23)
(C++20)
(C++20)
|
ermittelt Referenztypen eines Ranges
(Alias-Template) |
|
(C++20)
(C++20)
(C++20)
|
ermittelt Größen-, Differenz- und Werttypen eines Ranges
(Alias-Template) |