The following code example is taken from the book
C++20 - The Complete Guide
by Nicolai M. Josuttis,
Leanpub, 2021
The code is licensed under a
Creative Commons Attribution 4.0 International License.
// raw code
class Value {
private:
long id;
//...
public:
constexpr Value(long i) noexcept // supports implicit type conversion
: id{i} {
}
//...
// equality operators:
[[nodiscard]] friend constexpr
bool operator== (const Value& lhs, const Value& rhs) noexcept {
return lhs.id == rhs.id; // basic check for equality
}
[[nodiscard]] friend constexpr
bool operator!= (const Value& lhs, const Value& rhs) noexcept {
return !(lhs == rhs); // derived check for inequality
}
// relational operators:
[[nodiscard]] friend constexpr
bool operator< (const Value& lhs, const Value& rhs) noexcept {
return lhs.id < rhs.id; // basic check for ordering
}
[[nodiscard]] friend constexpr
bool operator<= (const Value& lhs, const Value& rhs) noexcept {
return !(rhs < lhs); // derived check
}
[[nodiscard]] friend constexpr
bool operator> (const Value& lhs, const Value& rhs) noexcept {
return rhs < lhs; // derived check
}
[[nodiscard]] friend constexpr
bool operator>= (const Value& lhs, const Value& rhs) noexcept {
return !(lhs < rhs); // derived check
}
};