Std :: Three_way_Comparable gibt FALSE für einen Nicht-Default-Operator <=> `falsch zurück
Posted: 06 Feb 2025, 03:16
Ich versuche, den Bediener in einer Klasse zu definieren. Wenn ich jedoch eine nicht defaugte Implementierung angehe, stn.
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.
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");
}
}