Можно ли определить оператор сравнения по умолчанию для структуры C?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли определить оператор сравнения по умолчанию для структуры C?

Сообщение Anonymous »

Я хочу использовать структуру C (termios) в своей программе на C++20, но я хочу иметь возможность сравнивать два экземпляра termios.
Поскольку сравнения по умолчанию нет, я попытался определить значение по умолчанию оператор сравнения:

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

bool operator == (const termios& lhs, const termios& rhs) = default;
Но я получаю сообщение об ошибке:

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

error: defaulted ‘bool operator==(const termios&, const termios&)’ is not a friend of ‘termios’
определение оператора тоже не работает:

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

auto operator  (const termios& lhs, const termios& rhs) = default;
->

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

error: defaulted ‘auto operator(const termios&, const termios&)’ is not a friend of ‘termios’
Ошибка одинакова для GCC 12.2 и clang-14.
Я всегда думал, что мы можем определить операторы сравнения, не являющиеся членами, без необходимости они должны быть друзьями структуры (в конце концов, структура берется из заголовка C, и все ее члены являются общедоступными)
Есть ли способ сравнения по умолчанию без сравнения элементов за элементом (что сделает сравнение зависимым от структуры участники)

Подробнее здесь: https://stackoverflow.com/questions/793 ... a-c-struct
Ответить

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

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

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

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

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