std::indirectly_writable
| Definiert in Header <iterator> |
||
| template< class Out, class T > concept indirectly_writable = |
(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
- Wenn std::indirectly_readable<Out> modelliert wird und std::iter_value_t<Out> denselben Typ wie std::decay_t<T> hat, dann ist *o nach einer der obigen Zuweisungen gleich dem Wert von
evor der Zuweisung.
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.