fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct intervall_range_proxy {};
  5.  
  6. template <typename T>
  7. struct intervall
  8. {
  9. T lower;
  10. T upper;
  11. };
  12.  
  13. template <typename T>
  14. intervall<T> operator*(T val, intervall_range_proxy)
  15. {
  16. return {val, T()};
  17. }
  18.  
  19. template <typename T>
  20. intervall<T> operator*(intervall<T> a, T val)
  21. {
  22. return {a.lower, val};
  23. }
  24.  
  25. #define AND *intervall_range_proxy{}*
  26.  
  27. template <typename T>
  28. bool operator+(T val, intervall<T> i)
  29. {
  30. return i.lower <= val && val < i.upper;
  31. }
  32.  
  33. #define BETWEEN +
  34.  
  35. int main() {
  36. auto i = 5 AND 7;
  37. cout << i.lower << ' ' << i.upper << '\n';
  38. cout << 6 BETWEEN i << '\n';
  39. cout << 2 BETWEEN 1 AND 10 << '\n';
  40. cout << 0 BETWEEN 1 AND 10 << '\n';
  41. cout << 1 BETWEEN 1 AND 10 << '\n';
  42. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
5 7
1
1
0
1