Если я попытаюсь реализовать все операторы сравнения с помощью оператора :
Код: Выделить всё
friend auto operator(const Some_class& lhs, const Some_class& rhs)
{
if (lhs.x < rhs.x) return std::strong_ordering::less;
if (lhs.x > rhs.x) return std::strong_ordering::greater;
else return std::strong_ordering::equal;
}
Код: Выделить всё
friend bool operator==(const Some_class& lhs, const Some_class& rhs)
{
if (lhs.x == rhs.x) return true;
return false;
}
В C++20, если сравнение не реализовано напрямую, компилятор
также попытается использовать кандидатов на перезапись. Благодаря этому, даже если
не используется по умолчанию (что реализовало бы все операторы), нам нужно только
реализовать == и , а все остальные сравнения переписываются в терминахиз этих двух.
Но я не понимаю почему. Почему первого фрагмента кода недостаточно для того, чтобы компилятор определил оператор ==?
Примечание. В этом случае я не могу использовать по умолчанию.
Подробнее здесь: https://stackoverflow.com/questions/785 ... oad-all-co