Estou tendo um comportamento estranho com o novo operador de nave espacial <=>
em C ++ 20. Estou usando o compilador do Visual Studio 2019 com /std:c++latest
.
Esse código compila bem, conforme o esperado:
#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;
}
No entanto, se eu alterar X para isso:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Eu recebo o seguinte erro do compilador:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Eu tentei isso no clang também, e recebo um comportamento semelhante.
Gostaria de receber algumas explicações sobre por que a implementação padrão gera operator==
corretamente, mas a personalizada não.