Оператор не по умолчанию <=> не генерирует == и != [дубликат] ⇐ C++
Оператор не по умолчанию <=> не генерирует == и != [дубликат]
Я столкнулся со странным поведением нового оператора космического корабля в 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++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== правильно, а пользовательская — нет.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение