Page 1 of 1

Std :: Three_way_Comparable gibt FALSE für einen Nicht-Default-Operator <=> `falsch zurück

Posted: 06 Feb 2025, 03:16
by Anonymous
Ich versuche, den Bediener in einer Klasse zu definieren. Wenn ich jedoch eine nicht defaugte Implementierung angehe, stn.

Code: Select all

#include 
#include 

using namespace std;

struct UDTC
{
int i_;
UDTC(int i) : i_(i) {}

#if 1
friend std::strong_ordering operator(const UDTC &lhs, const UDTC &rhs) {
return lhs.i_  rhs.i_;
}
#else
friend std::strong_ordering operator(const UDTC &lhs, const UDTC &rhs) = default;
#endif
};

int main(void)
{
if constexpr (std::three_way_comparable) {
fprintf(stderr, "UDTC is three_way_comparable\n");
} else {
fprintf(stderr, "UDTC is NOT three_way_comparable\n");
}
}
Wenn ich dies mit Visual Studio 2022 oder GCC 12 ausführe, wird die Funktion standardmäßig, drei_way_Comparable true zurück. Wenn ich meine eigene Implementierung gebe, gibt sie false zurück. Ich kann nur annehmen, dass meine Implementierung irgendwie unvollständig ist, aber ich sehe nicht, was ich fehlt.