#include <iostream>
#include <string>
#include <vector>
#define IN == in
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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKI2RlZmluZSBJTiA9PSBpbgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IHZlY192YWwKewogc3RkOjp2ZWN0b3I8VD4gdmVjOwp9OwoKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIGFkZF9zdHJpbmdzKFQgdmVjKXt9CgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KIHZvaWQgYWRkX3N0cmluZ3Moc3RkOjp2ZWN0b3I8VD4gJnZlYywgVCB2YWx1ZSwgQXJncy4uLiBhcmdzKSB7CiAJdmVjLnB1c2hfYmFjayh2YWx1ZSk7CiAJYWRkX3N0cmluZ3ModmVjLCBhcmdzLi4uKTsKIH0KCQogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KIHZvaWQgYWRkX3N0cmluZ3Moc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ2ZWMsIGNoYXIgY29uc3QqY29uc3QgdmFsdWVfcHRyLCBBcmdzLi4uIGFyZ3MpIHsKIAl2ZWMucHVzaF9iYWNrKHN0ZDo6c3RyaW5nKHZhbHVlX3B0cikpOwogCWFkZF9zdHJpbmdzKHZlYywgYXJncy4uLik7CiB9CQogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgogdmVjX3ZhbDxzdGQ6OnN0cmluZz4gaW4oY2hhciBjb25zdCpjb25zdCB2YWx1ZV9wdHIsIEFyZ3MuLi4gYXJncykgeyAKIAl2ZWNfdmFsPHN0ZDo6c3RyaW5nPiB2ZWNfdmFsX2luc3Q7CiAJYWRkX3N0cmluZ3ModmVjX3ZhbF9pbnN0LnZlYywgdmFsdWVfcHRyLCBhcmdzLi4uKTsKIAlyZXR1cm4gdmVjX3ZhbF9pbnN0OwogfSAKCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgogdmVjX3ZhbDxUPiBpbihUIHZhbHVlLCBBcmdzLi4uIGFyZ3MpIHsgCiAJdmVjX3ZhbDxUPiB2ZWNfdmFsX2luc3Q7CiAJYWRkX3N0cmluZ3ModmVjX3ZhbF9pbnN0LnZlYywgdmFsdWUsIGFyZ3MuLi4pOwogCXJldHVybiB2ZWNfdmFsX2luc3Q7CiB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpib29sIG9wZXJhdG9yPT0oVCBjb25zdCYgc3RyLCB2ZWNfdmFsPFQ+IGNvbnN0JiB2YWwpIHsKCWZvcihhdXRvICZpIDogdmFsLnZlYykgCgl7CiAJCWlmKGkgPT0gc3RyKQogCQkJcmV0dXJuIHRydWU7CiAJfQogCXJldHVybiBmYWxzZTsJCn0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmludCBtYWluKHZvaWQpIAp7CglzdGQ6OnN0cmluZyBsYW5nLCBjb3VudHJ5ID0gIkdCIjsKCglpZiAoY291bnRyeSBJTiAoIlVTIiwiR0IiLCJBVSIpKSAKCXsKCQlsYW5nPSJlbiI7Cgl9CgkKCS8vaWYgKGNvdW50cnkgSU4gKDEsMiwzKSkgbGFuZz0iaHoiOwkvLyBjb21waWxlIGVycm9yIC0gZGVkdWNlZCBjb25mbGljdGluZyB0eXBlcwoJCglpbnQgYSwgYiA9IDEwOwoJCglpZiAoYiBJTiAoMSwyLDEwLDMpKSAKCXsKCQlsYW5nICs9ICIgKzEwMDUwMCI7Cgl9CgoJc3RkOjpjb3V0IDw8ICJsYW5nID0gIiA8PCBsYW5nIDw8IHN0ZDo6ZW5kbDsKCglyZXR1cm4gMDsKfQo=