Me encuentro con un comportamiento extraño con el nuevo operador de nave espacial <=>
en C ++ 20. Estoy usando el compilador de Visual Studio 2019 con /std:c++latest
.
Este código se compila bien, como se esperaba:
#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;
}
Sin embargo, si cambio X a esto:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Me sale el siguiente error del compilador:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Intenté esto también en clang, y tengo un comportamiento similar.
Agradecería alguna explicación sobre por qué la implementación predeterminada se genera operator==
correctamente, pero la personalizada no.