//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/Wvr3aK75G
#include <compare> // für <=>
class Value {
// Wenn Sie class verwenden, geht es mit Privatem los.
int value_;
public:
explicit Value(int value) : value_{value} {}
// freie Funktionen, aber als friend deklariert
friend Value operator+(const Value& li, const Value& re);
friend Value operator-(const Value& li, const Value& re)
{ return Value{li.value_ - re.value_}; // innerhalb auch definiert
}
// operator<=> braucht nicht friend zu sein.
// für alle Vergleiche: <, >, <=, >= sowie == und !=
auto operator<=>(const Value& re) const = default;
};
// Definition der zuvor deklarierten friend-Funktion:
Value operator+(const Value& li, const Value& re) {
return Value{li.value_ + re.value_}; // Zugriff auf Privates erlaubt
}
int main() {
Value sieben{7}; Value drei{3}; Value zwei{2};
if((drei+zwei) < sieben) { // operator+, dann operarator< via <=>
return 0; // okay
} else {
return 1; // etwas ist falsch gelaufen
}
}