Ich habe ein seltsames Verhalten mit dem neuen Raumschiffoperator <=>
in C ++ 20. Ich verwende den Visual Studio 2019-Compiler mit /std:c++latest
.
Dieser Code wird wie erwartet gut kompiliert:
#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;
}
Wenn ich jedoch X in Folgendes ändere :
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Ich erhalte den folgenden Compilerfehler:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Ich habe das auch bei Clang versucht und bekomme ein ähnliches Verhalten.
Ich würde mich über eine Erklärung freuen, warum die Standardimplementierung operator==
korrekt generiert wird, die benutzerdefinierte jedoch nicht.