std::rel_ops::operator!=,>,<=,>=
From cppreference.com
 
 
 
 
 
 C++ 
 Feature test macros (C++20)
 Concepts library (C++20)
 Metaprogramming library (C++11)
 Ranges library (C++20)
 Filesystem library (C++17)
 Concurrency support library (C++11)
 Execution control library (C++26)
Utilities library 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
Relational operators (deprecated in C++20) 
 
 
 
 
 Integer comparison functions  
 
 
 
 Swap and type operations  Common vocabulary types 
 Type support (basic types, RTTI)
 Library feature-test macros (C++20)
(C++11)
(C++20)
(C++26)
(C++20)
 Coroutine support (C++20)
 Contract support (C++26)
(C++20)(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
  (C++20)(C++20)(C++20)
  (C++20)(C++20)(C++20)
 General utilities
rel_ops::operator!=rel_ops::operator>
  rel_ops::operator<=rel_ops::operator>=
(C++20)(C++20)(C++20)
  (C++20)(C++20)(C++20)
(C++20)
Defined in header 
 
 
<utility> 
 template< class T >
bool operator!=( const T& lhs, const T& rhs );
 (1)
 (deprecated in C++20)
bool operator!=( const T& lhs, const T& rhs );
template< class T >
bool operator>( const T& lhs, const T& rhs );
 (2)
 (deprecated in C++20)
bool operator>( const T& lhs, const T& rhs );
template< class T >
bool operator<=( const T& lhs, const T& rhs );
 (3)
 (deprecated in C++20)
bool operator<=( const T& lhs, const T& rhs );
template< class T >
bool operator>=( const T& lhs, const T& rhs );
 (4)
 (deprecated in C++20)
bool operator>=( const T& lhs, const T& rhs );
Given a user-defined operator== and operator< for objects of type T, implements the usual semantics of other comparison operators.
1) Implements operator!= in terms of operator==.
2) Implements operator> in terms of operator<.
3) Implements operator<= in terms of operator<.
4) Implements operator>= in terms of operator<.
[edit] Parameters
 lhs
 -
 left-hand argument
 rhs
 -
 right-hand argument
[edit] Return value
1) Returns true if lhs is not equal to rhs.
2) Returns true if lhs is greater than rhs.
3) Returns true if lhs is less or equal to rhs.
4) Returns true if lhs is greater or equal to rhs.
[edit] Possible implementation
| (1) operator!= | 
|---|
| namespace rel_ops { template<class T> bool operator!=(const T& lhs, const T& rhs) { return !(lhs == rhs); } } | 
| (2) operator> | 
| namespace rel_ops { template<class T> bool operator>(const T& lhs, const T& rhs) { return rhs < lhs; } } | 
| (3) operator<= | 
| namespace rel_ops { template<class T> bool operator<=(const T& lhs, const T& rhs) { return !(rhs < lhs); } } | 
| (4) operator>= | 
| namespace rel_ops { template<class T> bool operator>=(const T& lhs, const T& rhs) { return !(lhs < rhs); } } | 
[edit] Notes
Boost.operators provides a more versatile alternative to std::rel_ops.
As of C++20, std::rel_ops are deprecated in favor of operator<=>.
[edit] Example
Run this code
#include <iostream> #include <utility> struct Foo { int n; }; bool operator==(const Foo& lhs, const Foo& rhs) { return lhs.n == rhs.n; } bool operator<(const Foo& lhs, const Foo& rhs) { return lhs.n < rhs.n; } int main() { Foo f1 = {1}; Foo f2 = {2}; using namespace std::rel_ops; std::cout << std::boolalpha << "{1} != {2} : " << (f1 != f2) << '\n' << "{1} > {2} : " << (f1 > f2) << '\n' << "{1} <= {2} : " << (f1 <= f2) << '\n' << "{1} >= {2} : " << (f1 >= f2) << '\n'; }
Output:
{1} != {2} : true
{1} > {2} : false
{1} <= {2} : true
{1} >= {2} : false