Ошибка компиляции в C++: перегруженные функции имеют похожие преобразования

Я хотел сделать перегрузку оператор ==, что бы сравнить 2 объекта класса. Но у меня выдаёт ошибку.

Код:

#include <iostream>

using namespace std;

class Point
{
private:
    int x;
    int y;

public:
    Point(int x, int y)
    {
        this->x = x;
        this->y = y;
    }

    void PrintInfo()
    {
        printf("Точка имеет координаты [%d;%d]\n", x, y);
    }

    bool operator == (const Point& object)
    {
        return (x == object.x) && (y == object.y);
    }
};

int main()
{
    setlocale(LC_ALL, "ru");
    
    Point a(5, 1);
    Point b(9, 4);

    bool result = a == b;

    cout << result << endl;
}

Сама ошибка:

Ошибка компиляции

Надеюсь на помощь и объяснение, почему данная ошибка возникает:) Спасибо за внимание!


Ответы (1 шт):

Автор решения: Harry

Да исправить-то его несложно, надо просто не лениться и не скупиться на const везде, где можно :)

bool operator == (const Point& object) const

и далее по тексту...

А вот откуда C2666 — лично мне пока не очень понятно, вроде ничему из описанного по ссылке ситуация не соответствует. И что значит

может быть "bool Point::operator ==(const Point &)" [синтезированное выражение "y == x"].

Был бы признателен пояснениям гуру в стандартах.

P.S. Для неверующих в ошибку...

введите сюда описание изображения

Да, если поставить ключик стандарта c++17 или с++14, то ошибки нет. Но при c++20 здесь есть ошибка. Вот потому и прошу гуру пояснить, что там такого, в С++20, добавилось.

→ Ссылка