fork(2) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5.  
  6. namespace test
  7. {
  8.  
  9. struct StructTest
  10. {
  11. int i;
  12.  
  13. int compare( const StructTest s )
  14. {
  15. if (i<s.i) return -1;
  16. else if (i>s.i) return 1;
  17. else return 0;
  18. }
  19.  
  20. };
  21.  
  22. bool operator<( StructTest t1, StructTest t2 )
  23. {
  24. return t1.compare(t2) < 0;
  25. }
  26.  
  27.  
  28. enum class EnumTest
  29. {
  30. e1, e2, e3
  31. };
  32.  
  33. namespace utils {
  34.  
  35. inline int compare( EnumTest e1, EnumTest e2 )
  36. {
  37. unsigned u1 = (unsigned)e1;
  38. unsigned u2 = (unsigned)e2;
  39.  
  40. if (u1<u2) return -1;
  41. else if (u1>u2) return 1;
  42. else return 0;
  43. }
  44.  
  45. } // namespace utils
  46.  
  47. inline bool operator< ( EnumTest e1, EnumTest e2 ) { return utils::compare( e1, e2 ) < 0; }
  48. inline bool operator<=( EnumTest e1, EnumTest e2 ) { return utils::compare( e1, e2 ) <= 0; }
  49. inline bool operator> ( EnumTest e1, EnumTest e2 ) { return utils::compare( e1, e2 ) > 0; }
  50. inline bool operator>=( EnumTest e1, EnumTest e2 ) { return utils::compare( e1, e2 ) >= 0; }
  51. inline bool operator==( EnumTest e1, EnumTest e2 ) { return utils::compare( e1, e2 ) == 0; }
  52. inline bool operator!=( EnumTest e1, EnumTest e2 ) { return utils::compare( e1, e2 ) != 0; }
  53.  
  54. struct SomeOther
  55. {
  56. EnumTest e;
  57. };
  58.  
  59. } // namespace test
  60.  
  61.  
  62. int main( int argc, char * argv[])
  63. {
  64. test::SomeOther so1 = { test::EnumTest::e1 };
  65. test::SomeOther so2 = { test::EnumTest::e2 };
  66.  
  67. if (so1.e<so2.e)
  68. cout<<"so1.e<so2.e\n";
  69. else
  70. cout<<"so1.e<so2.e\n";
  71.  
  72. return 0;
  73.  
  74. }
  75.  
  76.  
Success #stdin #stdout 0s 4252KB
stdin
Standard input is empty
stdout
so1.e<so2.e