#include <iostream>
#include <string>
#include <vector>

template<typename T>
struct vec_val
{
 std::vector<T> vec;
};

 template<typename T>
 void add_strings(T vec){}

 template<typename T, typename... Args>
 void add_strings(std::vector<T> &vec, T value, Args... args) {
 	vec.push_back(value);
 	add_strings(vec, args...);
 }
	
 template<typename... Args>
 void add_strings(std::vector<std::string> &vec, char const*const value_ptr, Args... args) {
 	vec.push_back(std::string(value_ptr));
 	add_strings(vec, args...);
 }	
 
 template<typename... Args>
 vec_val<std::string> in(char const*const value_ptr, Args... args) { 
 	vec_val<std::string> vec_val_inst;
 	add_strings(vec_val_inst.vec, value_ptr, args...);
 	return vec_val_inst;
 } 

 template<typename T, typename... Args>
 vec_val<T> in(T value, Args... args) { 
 	vec_val<T> vec_val_inst;
 	add_strings(vec_val_inst.vec, value, args...);
 	return vec_val_inst;
 }

template<typename T>
bool operator==(T const& str, vec_val<T> const& val) {
	for(auto &i : val.vec) 
	{
 		if(i == str)
 			return true;
 	}
 	return false;	
}
// -----------------------------------------------------

int main(void) 
{
	std::string lang, country = "GB";

	if (country == in ("US","GB","AU")) 
	{
		lang="en";
	}
	
	//if (country == in (1,2,3)) lang="hz";	// compile error - deduced conflicting types
	
	int a, b = 10;
	
	if (b == in (1,2,10,3)) 
	{
		lang += " +100500";
	}

	std::cout << "lang = " << lang << std::endl;

	return 0;
}
