Saya mengalami perilaku aneh dengan operator pesawat ruang angkasa baru <=>
di C ++ 20. Saya menggunakan kompiler Visual Studio 2019 dengan /std:c++latest
.
Kode ini dikompilasi dengan baik, seperti yang diharapkan:
#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;
}
Namun, jika saya mengubah X ke ini:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Saya mendapatkan kesalahan kompilator berikut:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Saya mencoba ini pada dentang juga, dan saya mendapatkan perilaku yang sama.
Saya akan menghargai beberapa penjelasan tentang mengapa implementasi standar menghasilkan operator==
dengan benar, tetapi yang kustom tidak.