Почему оператор по умолчанию <=> предоставляет нам оператор == бесплатно, а специальная реализация — нет? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Почему оператор по умолчанию <=> предоставляет нам оператор == бесплатно, а специальная реализация — нет? [дубликат]

Сообщение Anonymous »

Я попробовал два варианта определения оператора,
вариант A использует = default. В результате я могу использовать оператор ==.
Но если я реализую оператор вручную в варианте B, сравнение x1 == x2 перестанет работать.
Почему это так? Это указано в стандарте C++20? Пока мне не удалось найти никакого объяснения.
Для меня оператор — это функция, независимо от того, используется она по умолчанию или нет. Я не ожидаю никакой разницы между A и B.
Код:
#include

class X {
public:
int y;

/*A*/ inline std::strong_ordering operator(const X& another) const = default;
/*B*/ //inline std::strong_ordering operator(const X& another) const { return y another.y; }
};

int main()
{
using std::cout;
using std::endl;

X x1;
x1.y = 5;

X x2;
x2.y = 7;

cout

Подробнее здесь: https://stackoverflow.com/questions/786 ... implementa

Вернуться в «C++»