std::experimental::ranges:: WeaklyEqualityComparableWith
|
Definiert im Header
<experimental/ranges/concepts>
|
||
|
template
<
class
T,
class
U
>
concept
bool
WeaklyEqualityComparableWith
=
|
(ranges TS) | |
Das Konzept
WeaklyEqualityComparableWith<T, U>
spezifiziert, dass ein Objekt vom Typ
T
und ein Objekt vom Typ
U
miteinander (in beliebiger Reihenfolge) auf Gleichheit verglichen werden können, und zwar sowohl mit
==
als auch mit
!=
, und die Ergebnisse der Vergleiche konsistent sind. Formal wird
WeaklyEqualityComparableWith<T, U>
nur dann erfüllt, wenn gegeben
-
t, ein L-Wert vom Typ const std:: remove_reference_t < T > und -
u, ein L-Wert vom Typ const std:: remove_reference_t < U > ,
Folgendes trifft zu:
- t == u , u == t , t ! = u , u ! = t haben denselben Definitionsbereich;
- bool ( u == t ) == bool ( t == u ) ;
- bool ( t ! = u ) == ! bool ( t == u ) ; und
- bool ( u ! = t ) == bool ( t ! = u ) .
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 expliziten Änderungen an diesen Eingabeobjekten zwischen den Auswertungen vorgenommen wurden.
Sofern nicht anders angegeben, muss jeder Ausdruck, der in einem requires-expression verwendet wird, 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.
Implizite Ausdrucksvarianten
Ein requires-expression , der einen Ausdruck verwendet, der für einen konstanten Lvalue-Operanden nicht-modifizierend ist, erfordert implizit auch zusätzliche Variationen dieses Ausdrucks, die einen nicht-konstanten Lvalue oder (möglicherweise konstanten) Rvalue für den gegebenen Operanden akzeptieren, es sei denn, eine solche Ausdrucksvariation wird explizit mit abweichender Semantik gefordert. Diese impliziten Ausdrucksvariationen müssen dieselben semantischen Anforderungen erfüllen wie der deklarierte Ausdruck. Das Ausmaß, in dem eine Implementierung die Syntax der Variationen überprüft, ist nicht spezifiziert.
Siehe auch
|
spezifiziert, dass der Operator
==
eine Äquivalenzrelation ist
(Konzept) |