*
@Schlangenmensch sagte in Probleme mit std::sort, std::ranges::sort und eigenem < Operator:
@john-0 Es gibt Fälle, bei denen Ordering und Gleichheit nicht wirklich passend sind.
Wenn man sich auf diese Schiene begibt, dann öffnet man die Büchse der Pandora. Bisher war das in C++ so, dass operator<, operator> und operator== sich auf die gleiche Ordnungsrelation bezogen. Im Beispiel wurden ints benutzt, d.h. eine Teilmenge von Z\mathbb{Z}Z auf der eines keine Mehrdeutigkeit der Vergleichsoperatoren gibt. Wenn man hingegen Elemente aus C\mathbb{C}C hat, dann gibt es darauf nur den Test auf Gleichheit. (C,∥∥)C→R(\mathbb{C}, \lVert \, \rVert)\, \mathbb{C}\rightarrow\mathbb{R}(C,∥∥)C→R bildet nun einmal auf eine andere Zahlenmenge ab. std::complex hatte schon immer die Funktion abs, was die Anforderung einer Norm auf std::complex entspricht.
Bei einer Programmiersprache stellt sich dann die Frage was soll dann der operator== vergleichen? Wir der Wert von Foo vergleichen, d.h. in diesem Fall wäre das eindeutig wegen der Teilmenge von Z\mathbb{Z}Z, oder werden die Objekte vergleichen? Da stellt sich dann die Frage, ob man die Gleichheit der Objekte testet oder deren Äquivalenz, d.h. sind die Objekte wirklich gleich d.h. dasselbe Objekt im Speicher, oder haben sie nur dieselben Werte?