std::ranges::iter_move
| Definiert in Header <iterator> |
||
| inline namespace /* nicht spezifiziert */ { inline constexpr /* nicht spezifiziert */ iter_move = /* nicht spezifiziert */; |
(seit C++20) (Customization-Point-Objekt) |
|
| Aufruf-Signatur |
||
| template< class T > requires /* siehe unten */ |
(seit C++20) | |
Holt eine rvalue-Referenz oder ein prvalue-Temporäres von einem gegebenen Iterator.
Ein ranges::iter_move(t) ist ausdrucks-äquivalent zu
- iter_move(t), wenn t einen Klassen- oder Aufzählungstyp hat und der Ausdruck gut geformt ist, wenn er als nicht ausgewerteter Operand behandelt wird, wobei die Überladungsauflösung von
iter_movenur mit den Kandidaten durchgeführt wird, die durch argumentabhängige Suche gefunden werden. - Andernfalls std::move(*t), wenn *t gut geformt ist und ein lvalue ist.
- Andernfalls *t, wenn *t gut geformt ist und ein rvalue ist.
In allen anderen Fällen ist ein Aufruf von ranges::iter_move schlecht geformt, was zu einem Substitutionsfehler führen kann, wenn ranges::iter_move(e) im unmittelbaren Kontext einer Vorlageninstanziierung erscheint.
Wenn ranges::iter_move(e) nicht gleich *e ist, ist das Programm schlecht geformt, keine Diagnose erforderlich.
Customization Point Objects
Der Name ranges::iter_move bezeichnet ein Customization Point Object, das ein konstanter Funktionsobjekt vom Typ Literal semiregular ist. Zu Auslegungszwecken wird die cv-unqualifizierte Version seines Typs als __iter_move_fn bezeichnet.
Alle Instanzen von __iter_move_fn sind gleich. Die Auswirkungen des Aufrufs verschiedener Instanzen vom Typ __iter_move_fn auf dieselben Argumente sind äquivalent, unabhängig davon, ob der Ausdruck, der die Instanz bezeichnet, ein lvalue oder ein rvalue ist und ob er mit const qualifiziert ist oder nicht (eine volatile-qualifizierte Instanz muss jedoch nicht aufrufbar sein). Daher kann ranges::iter_move frei kopiert werden und seine Kopien können austauschbar verwendet werden.
Gegeben einer Menge von Typen Args..., wenn std::declval<Args>()... die Anforderungen für Argumente an ranges::iter_move oben erfüllt, modelliert __iter_move_fn
- std::invocable<__iter_move_fn, Args...>,
- std::invocable<const __iter_move_fn, Args...>,
- std::invocable<__iter_move_fn&, Args...>, und
- std::invocable<const __iter_move_fn&, Args...>.
Andernfalls nimmt kein Funktionsaufrufoperator von __iter_move_fn an der Überladungsauflösung teil.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| (C++20) |
konvertiert das Ergebnis der Dereferenzierung des angepassten zugrunde liegenden Iterators in seinen zugehörigen rvalue-Referenztyp (Funktion) |
| (C++20) |
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp (Funktion) |