<=>
C ++ 20 yeni uzay gemisi operatörü ile garip bir davranış içine koşuyorum . Visual Studio 2019 derleyicisini ile kullanıyorum /std:c++latest
.
Bu kod beklendiği gibi iyi derlenir:
#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;
}
Ancak, X'i bu şekilde değiştirirsem :
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Aşağıdaki derleyici hatasını alıyorum:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Bunu clang'da da denedim ve benzer davranışlar elde ediyorum.
Varsayılan uygulamanın neden operator==
doğru bir şekilde oluşturduğuna dair bazı açıklamaları takdir ediyorum , ancak özel olan bunu yapmıyor.