std::experimental::ranges::Swappable, std::experimental::ranges::SwappableWith
| Definiert in Header <experimental/ranges/concepts> |
||
| template< class T > concept bool Swappable = |
(1) | (Ranges TS) |
| template< class T, class U > concept bool SwappableWith = |
(2) | (Ranges TS) |
Das Konzept Swappable<T> gibt an, dass lvalues vom Typ T vertauschbar sind.
Das Konzept SwappableWith<T, U> gibt an, dass Ausdrücke der von T und U kodierten Typen und Wertkategorien miteinander vertauschbar sind. SwappableWith<T, U> ist nur dann erfüllt, wenn ein Aufruf von ranges::swap(t, u) den Wert von t und u vertauscht, d.h., gegeben getrennte Objekte t2 gleich t und u2 gleich u, nach der Auswertung von entweder ranges::swap(t, u) oder ranges::swap(u, t), t2 gleich u und u2 gleich t ist.
[bearbeiten] Gleichheitserhaltung
Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.
- Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
- Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem Ausdruck modifizierten Operanden (falls vorhanden).
Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.
Sofern nicht anders angegeben, muss jeder in einem requires-expression verwendete Ausdruck gleichheitserhaltend und stabil sein, und die Auswertung des Ausdrucks darf nur seine nicht-konstanten Operanden modifizieren. Operanden, die konstant sind, dürfen nicht modifiziert werden.