Tôi đang gặp phải một hành vi kỳ lạ với toán tử tàu vũ trụ mới <=>
trong C ++ 20. Tôi đang sử dụng trình biên dịch Visual Studio 2019 với /std:c++latest
.
Mã này biên dịch tốt, như mong đợi:
#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;
}
Tuy nhiên, nếu tôi thay đổi X thành này:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Tôi nhận được lỗi trình biên dịch sau:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Tôi cũng đã thử điều này trên clang và tôi cũng có hành vi tương tự.
Tôi sẽ đánh giá cao một số giải thích về lý do tại sao việc triển khai mặc định tạo ra operator==
chính xác, nhưng tùy chỉnh thì không.