Je rencontre un comportement étrange avec le nouvel opérateur de vaisseau spatial <=>
en C ++ 20. J'utilise le compilateur Visual Studio 2019 avec /std:c++latest
.
Ce code se compile très bien, comme prévu:
#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;
}
Cependant, si je change X en ceci:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
J'obtiens l'erreur de compilation suivante:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
J'ai également essayé ceci sur clang, et j'obtiens un comportement similaire.
J'apprécierais quelques explications sur la raison pour laquelle l'implémentation par défaut génère operator==
correctement, mais pas celle personnalisée.