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