Page 1 of 1

Ist es möglich, einen Standardvergleichsoperator für eine C-Struktur zu definieren?

Posted: 20 Jan 2025, 11:58
by Guest
Ich möchte eine C-Struktur (Termios) in meinem C++20-Programm verwenden, aber ich möchte zwei Termios-Instanzen vergleichen können.
Da es keinen Standardvergleich gibt, habe ich versucht, einen Standard zu definieren Vergleichsoperator:

Code: Select all

bool operator == (const termios& lhs, const termios& rhs) = default;
Aber ich erhalte eine Fehlermeldung:

Code: Select all

error: defaulted ‘bool operator==(const termios&, const termios&)’ is not a friend of ‘termios’
Operator definieren funktioniert auch nicht:

Code: Select all

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

Code: Select all

error: defaulted ‘auto operator(const termios&, const termios&)’ is not a friend of ‘termios’
Der Fehler ist derselbe für GCC 12.2 und clang-14
Ich dachte immer, dass wir Vergleichsoperatoren definieren können, die keine Mitglieder sind, ohne dass dies erforderlich ist Sie müssen mit der Struktur befreundet sein (schließlich stammt die Struktur aus einem C-Header und alle ihre Mitglieder sind öffentlich).
Gibt es eine Möglichkeit zum Standardvergleich, ohne Mitglied für Mitglied zu vergleichen? (wodurch der Vergleich von der Struktur abhängig wird Mitglieder)