Трехсторонний оператор сравнения не дефолт из класса не является другомC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Трехсторонний оператор сравнения не дефолт из класса не является другом

Сообщение Anonymous »

У меня есть проект, нацеленный на C ++ 17, который определяет некоторые структуры без операторов сравнения (потому что они не требуются, и никто не мог их определить). Затем я провожу модульное тестирование этого кода в C ++ 20 и могу использовать сравнения по умолчанию, предоставленные оператором невыполненного космоса: < /p>

Код: Выделить всё

// foo.hpp
struct foo {
int x{};
};

// foo_test.cpp
#include "foo.hpp"
#include 

auto operator(const foo&, const foo&) = default;
< /code>
Я получаю ошибку: < /p>

Трехсторонний оператор сравнения не является другом 'foo' < /p>
< /blockquote>
, хотя я понимаю эту ошибку, чтобы просто «вы не можете заявить о том, что я не могу заявить о том, что я не могу заявить о том, что я не могу заявить о том, что я не могу заявить о том, как я не могу заявить о том, что я не могу заявить о том, что я не могу заявить о том, что я не могу заявить о том, что я не могу заявить о том, как я не могу просто Fields Public, поэтому функция друга не имеет большего доступа, чем у не подходящей. То же самое происходит для оператора == 
.
Есть ли способ добиться сравнения по умолчанию без изменения исходного заголовка? Я знаю, что мог бы определить его встроенный в #if __cplusplus> = 202002L < /code>, но предпочел бы избежать его. < /P>
Редактировать:
можно ли определить дефолтный оператор сравнения для структуры C? говорит, что это невозможно напрямую, но я бы также примет некоторые обходные пути, такие как magic_comparator (a) == magic_comparator (b); , возможно, что -то, использующее анонимные союзы или другие хаки.

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-a-friend
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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