fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. #define IN == in
  6.  
  7. template<typename T>
  8. struct vec_val
  9. {
  10. std::vector<T> vec;
  11. };
  12.  
  13. template<typename T>
  14. void add_strings(T vec){}
  15.  
  16. template<typename T, typename... Args>
  17. void add_strings(std::vector<T> &vec, T value, Args... args) {
  18. vec.push_back(value);
  19. add_strings(vec, args...);
  20. }
  21.  
  22. template<typename... Args>
  23. void add_strings(std::vector<std::string> &vec, char const*const value_ptr, Args... args) {
  24. vec.push_back(std::string(value_ptr));
  25. add_strings(vec, args...);
  26. }
  27.  
  28. template<typename... Args>
  29. vec_val<std::string> in(char const*const value_ptr, Args... args) {
  30. vec_val<std::string> vec_val_inst;
  31. add_strings(vec_val_inst.vec, value_ptr, args...);
  32. return vec_val_inst;
  33. }
  34.  
  35. template<typename T, typename... Args>
  36. vec_val<T> in(T value, Args... args) {
  37. vec_val<T> vec_val_inst;
  38. add_strings(vec_val_inst.vec, value, args...);
  39. return vec_val_inst;
  40. }
  41.  
  42. template<typename T>
  43. bool operator==(T const& str, vec_val<T> const& val) {
  44. for(auto &i : val.vec)
  45. {
  46. if(i == str)
  47. return true;
  48. }
  49. return false;
  50. }
  51. // -----------------------------------------------------
  52.  
  53. int main(void)
  54. {
  55. std::string lang, country = "GB";
  56.  
  57. if (country IN ("US","GB","AU"))
  58. {
  59. lang="en";
  60. }
  61.  
  62. //if (country IN (1,2,3)) lang="hz"; // compile error - deduced conflicting types
  63.  
  64. int a, b = 10;
  65.  
  66. if (b IN (1,2,10,3))
  67. {
  68. lang += " +100500";
  69. }
  70.  
  71. std::cout << "lang = " << lang << std::endl;
  72.  
  73. return 0;
  74. }
  75.  
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
lang = en +100500