Я стикаюся з дивною поведінкою з новим оператором космічного корабля <=>
в C ++ 20. Я використовую компілятор Visual Studio 2019 /std:c++latest
.
Цей код складається добре, як і очікувалося:
#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;
}
Однак якщо я зміню X на це:
struct X
{
int Dummy = 0;
auto operator<=>(const X& other) const
{
return Dummy <=> other.Dummy;
}
};
Я отримую таку помилку компілятора:
error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Я спробував це і на кланге, і я отримую подібну поведінку.
Я би вдячний деяким поясненням того, чому реалізація за замовчуванням генерується operator==
правильно, але спеціальна - ні.