Sto riscontrando uno strano comportamento con il nuovo operatore di astronave <=>
in C ++ 20. Sto usando Visual Studio 2019 compilatore con /std:c++latest
.
Questo codice viene compilato correttamente, come previsto:
#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;
}
Tuttavia, se cambio X in questo:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Ottengo il seguente errore del compilatore:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Ho provato anche questo su clang e ho un comportamento simile.
Gradirei qualche spiegazione sul perché l'implementazione predefinita viene generata operator==
correttamente, ma quella personalizzata no.