Napotykam dziwne zachowanie z nowym operatorem statku kosmicznego <=>
w C ++ 20. Korzystam z kompilatora Visual Studio 2019 z /std:c++latest
.
Ten kod kompiluje się zgodnie z oczekiwaniami:
#include <compare>
struct X
{
int Dummy = 0;
auto operator<=>(const X&) const = default; // Default implementation
};
int main()
{
X a, b;
a == b; // OK!
return 0;
}
Jeśli jednak zmienię X na to:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Otrzymuję następujący błąd kompilatora:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Próbowałem tego również na clang i mam podobne zachowanie.
Byłbym wdzięczny za wyjaśnienie, dlaczego domyślna implementacja generuje operator==
poprawnie, ale niestandardowa nie.