Namensräume
Varianten
Aktionen

std::ranges::iter_move

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Iterator-Anpassungspunkte
ranges::iter_move
(C++20)
Bereichszugriff
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
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 */

constexpr decltype(auto) iter_move( T&& t ) noexcept(/* 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

  1. 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_move nur mit den Kandidaten durchgeführt wird, die durch argumentabhängige Suche gefunden werden.
  2. Andernfalls std::move(*t), wenn *t gut geformt ist und ein lvalue ist.
  3. 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

Andernfalls nimmt kein Funktionsaufrufoperator von __iter_move_fn an der Überladungsauflösung teil.

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

(C++20)
konvertiert das Ergebnis der Dereferenzierung des angepassten zugrunde liegenden Iterators in seinen zugehörigen rvalue-Referenztyp
(Funktion) [edit]
(C++20)
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp
(Funktion) [edit]