std::experimental::ranges:: Writable
|
Definiert in Header
<experimental/ranges/iterator>
|
||
|
template
<
class
Out,
class
T
>
concept
bool
Writable
=
|
(ranges TS) | |
Das Konzept
Writable<Out, T>
spezifiziert die Anforderungen zum Schreiben eines Werts, dessen Typ und Wertkategorie durch
T
kodiert sind, in das referenzierte Objekt eines Iterators
Out
.
Sei
E
ein Ausdruck, sodass
decltype
(
(
E
)
)
gleich
T
ist, und
o
ein dereferenzierbares Objekt vom Typ
Out
, dann ist
Writable<Out, T>
nur erfüllt, wenn:
-
Wenn
Readable
<
Out
>
&&
Same
<
ranges
::
value_type_t
<
Out
>
,
std::
decay_t
<
T
>>
erfüllt ist, dann ist
*
o
nach jeder obigen Zuweisung gleich dem Wert von
Evor der Zuweisung.
o
muss nach der Auswertung eines der obigen Zuweisungsausdrücke nicht dereferenzierbar sein. Wenn
E
ein X-Wert ist, ist der resultierende Zustand des bezeichneten Objekts gültig aber unspezifiziert.
Gleichheitserhaltung
Ein Ausdruck ist equality preserving , wenn er bei gleichen Eingaben gleiche Ausgaben liefert.
- Die Eingaben eines Ausdrucks bestehen aus seinen Operanden.
- Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen durch den Ausdruck modifizierten Operanden (falls vorhanden).
Jeder Ausdruck, der gleichungserhaltend sein muss, muss darüber hinaus stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, sofern keine explizite Änderung dieser Eingabeobjekte zwischen den Auswertungen erfolgt.
Hinweise
Die einzige gültige Verwendung von operator * ist auf der linken Seite eines Zuweisungsausdrucks. Die Zuweisung durch denselben Wert eines beschreibbaren Typs darf nur einmal erfolgen.
Die erforderlichen Ausdrücke mit
const_cast
verhindern, dass
Readable
-Objekte mit Prvalue-
reference
-Typen versehentlich die syntaktischen Anforderungen von
Writable
erfüllen, während Proxy-Referenzen weiterhin funktionieren, solange ihre Constness oberflächlich ist. Siehe
Ranges TS Issue 381
.