Код: Выделить всё
// 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
Мобильная версия