|
|
Defined in header <utility> | ||
template<class T> bool operator!=(const T& lhs,const T& rhs); | (1) | (deprecated in C++20) |
template<class T> bool operator>(const T& lhs,const T& rhs); | (2) | (deprecated in C++20) |
template<class T> bool operator<=(const T& lhs,const T& rhs); | (3) | (deprecated in C++20) |
template<class T> bool operator>=(const T& lhs,const T& rhs); | (4) | (deprecated in C++20) |
Given a user-definedoperator== andoperator< for objects of typeT
, implements the usual semantics of other comparison operators.
Contents |
lhs | - | left-hand argument |
rhs | - | right-hand argument |
(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);}} |
Boost.operators provides a more versatile alternative tostd::rel_ops
.
As of C++20,std::rel_ops
are deprecated in favor ofoperator<=>.
#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};usingnamespace 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