Оператор не по умолчанию <=> не генерирует == и != [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Оператор не по умолчанию <=> не генерирует == и != [дубликат]

Сообщение Anonymous »


Я столкнулся со странным поведением нового оператора космического корабля в C++20. Я использую компилятор Visual Studio 2019 с /std:c++latest.

Этот код компилируется нормально, как и ожидалось:

#include структура X { INT Dummy = 0; автоматический оператор(const X&) const = по умолчанию; // Реализация по умолчанию }; интервал основной() { Х а, б; а == б; // ХОРОШО! вернуть 0; } Однако, если я изменю X на это:

структура X { INT Dummy = 0; автоматический оператор(const X& другое) const { return Dummy other.Dummy; } }; Я получаю следующую ошибку компилятора:

ошибка C2676: двоичный '==': 'X' не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора

Я попробовал это и на clang, и у меня такое же поведение.

Я был бы признателен за объяснение того, почему реализация по умолчанию генерирует operator== правильно, а пользовательская — нет.

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