fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<typename T>
  5. struct relational
  6. {
  7. friend bool operator> (T const &lhs, T const &rhs) { return rhs < lhs; }
  8. friend bool operator==(T const &lhs, T const &rhs) { return !(lhs < rhs || lhs > rhs); }
  9. friend bool operator!=(T const &lhs, T const &rhs) { return !(rhs == lhs); }
  10. friend bool operator<=(T const &lhs, T const &rhs) { return !(rhs < lhs); }
  11. friend bool operator>=(T const &lhs, T const &rhs) { return !(lhs < rhs); }
  12. };
  13.  
  14. struct foo : relational<foo>
  15. {
  16. int a;
  17. foo(int a) : a(a) {}
  18. friend bool operator<(foo const &f1, foo const &f2)
  19. {
  20. return f1.a < f2.a;
  21. }
  22. };
  23.  
  24. int main() {
  25. foo f1(1), f2(2);
  26.  
  27. cout << (f1 == f2) << endl;
  28. cout << (f2 > f1) << endl;
  29. return 0;
  30. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
0
1