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
Von cppreference.com
| Definiert in Header <iterator> |
||
| template< class T > using iter_value_t = /* siehe unten */; |
(1) | (seit C++20) |
| template< /*dereferenceable*/ 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) |
| Hilfsschablonen |
||
template< class T > concept /*dereferenceable*/ = /* siehe unten */; |
(7) | (nur Exposition*) |
template< std::indirectly_readable T > using /*indirect-value-t*/ = /* siehe unten */; |
(8) | (nur Exposition*) |
Berechnet die zugehörigen Typen eines Iterators.
1) Berechnet den Werttyp von
T.- Wenn std::iterator_traits<std::remove_cvref_t<T>> nicht spezialisiert ist, dann ist std::iter_value_t<T> std::indirectly_readable_traits<std::remove_cvref_t<T>>::value_type.
- Andernfalls ist es std::iterator_traits<std::remove_cvref_t<T>>::value_type.
2) Berechnet den Referenztyp von
T.3) Berechnet den const-Referenztyp von
T.4) Berechnet den Differenztyp von
T.- Wenn std::iterator_traits<std::remove_cvref_t<T>> nicht spezialisiert ist, dann ist std::iter_difference_t<T> std::incrementable_traits<std::remove_cvref_t<T>>::difference_type.
- Andernfalls ist es std::iterator_traits<std::remove_cvref_t<T>>::difference_type.
5) Berechnet den Rvalue-Referenztyp von
T. Die Bedingung für diese Alias-Template ist erfüllt, wenn und nur wenn der Ausdruck ranges::iter_move(std::declval<T&>()) gültig ist und einen referenzierbaren Typ hat.6) Berechnet den gemeinsamen Referenztyp von
T. Dies ist der gemeinsame Referenztyp zwischen seinem Referenztyp und einer lvalue-Referenz auf seinen Werttyp.7) Das expositions-nur-Konzept
dereferenceable ist erfüllt, wenn und nur wenn der Ausdruck *std::declval<T&>() gültig ist und einen referenzierbaren Typ hat.8) Das expositions-nur-Alias-Template
indirect-value-t bezeichnet Folgendes:- std::invoke_result_t<Proj&, /*indirect-value-t*/<I>>, wenn
Tgleich std::projected<I, Proj> für einige TypenIundProjist. - Andernfalls std::iter_value_t<T>&.
[bearbeiten] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| P2609R3 | C++20 | std::iter_common_reference_t wurde in Bezug aufstd::iter_value_t<T>& definiert, was falsch war. std::projected Typen, die in Rvalue-Referenztypen projizieren, |
definiert in Bezug auf /*indirect-value-t*/<T> um solche Fälle zu behandeln. |
[bearbeiten] Siehe auch
| (C++20) |
spezifiziert, dass ein Typ durch Anwendung des Operators * indirekt lesbar ist(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(Klassenschablone) |
| (C++20) |
berechnet den Differenztyp eines weakly_incrementable-Typs(Klassenschablone) |
| bietet eine einheitliche Schnittstelle zu den Eigenschaften eines Iterators (Klassenschablone) | |
| (C++20)(C++23)(C++20)(C++23) |
ermittelt Iterator- und Sentinel-Typen eines Ranges (Alias-Template) |
| ermittelt Referenztypen eines Ranges (Alias-Template) | |
| (C++20)(C++20)(C++20) |
ermittelt Größen-, Differenz- und Wertetypen eines Ranges (Alias-Template) |