Namensräume
Varianten
Aktionen

std::indirectly_writable

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
indirectly_writable
(C++20)
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
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>
template< class Out, class T >

    concept indirectly_writable =
        requires(Out&& o, T&& t) {
            *o = std::forward<T>(t);
            *std::forward<Out>(o) = std::forward<T>(t);
            const_cast<const std::iter_reference_t<Out>&&>(*o) = std::forward<T>(t);
            const_cast<const std::iter_reference_t<Out>&&>(*std::forward<Out>(o)) =
                std::forward<T>(t);
        };

        /* none of the four expressions above are required to be equality-preserving */
(seit C++20)

Das Konzept indirectly_writable<Out, T> spezifiziert die Anforderungen zum Schreiben eines Wertes, dessen Typ und Wertkategorie durch T kodiert sind, in das referenzierte Objekt eines Iterators Out.

[bearbeiten] Semantische Anforderungen

Sei e ein Ausdruck, so dass decltype((e)) T ist, und o ein dereferenzierbares Objekt vom Typ Out, dann wird indirectly_writable<Out, T> nur modelliert, wenn

o ist nach der Auswertung eines der obigen Zuweisungsausdrücke nicht als dereferenzierbar erforderlich. Wenn e ein xvalue ist, ist der resultierende Zustand des von ihm bezeichneten Objekts gültig, aber nicht spezifiziert.

[bearbeiten] Gleichheitserhaltung

Ausdrücke, die in requires-Ausdrücken der Standardbibliothekskonzepte deklariert sind, müssen gleichheitserhaltend sein (sofern nicht anders angegeben).

[bearbeiten] Hinweise

Die einzige gültige Verwendung von operator* ist auf der linken Seite eines Zuweisungsausdrucks. Eine Zuweisung über denselben Wert eines indirekt beschreibbaren Typs darf nur einmal erfolgen.

Die erforderlichen Ausdrücke mit const_cast verhindern, dass indirectly_readable Objekte mit prvalue reference Typen versehentlich die syntaktischen Anforderungen von indirectly_writable erfüllen, während Proxy-Referenzen weiterhin funktionieren, solange ihre Constness flach ist. Siehe Ranges TS issue 381.