#include <iostream>
#include <string>
#include <vector>
#include <memory>
struct in
{
std::shared_ptr<void> ptr;
size_t hash_type;
void add_strings(){}
template<typename T, typename... Args>
void add_strings(T value, Args... args) {
std::vector<T> &vec = *(std::vector<T>*)ptr.get();
vec.push_back(value);
add_strings(args...);
}
template<typename... Args>
void add_strings(char const*const value_ptr, Args... args) {
std::vector<std::string> &vec = *(std::vector<std::string>*)ptr.get();
vec.push_back(std::string(value_ptr));
add_strings(args...);
}
template<typename... Args>
in(char const*const value_ptr, Args... args) {
hash_type = typeid(std::string).hash_code();
ptr = std::make_shared<std::vector<std::string>>(0);
add_strings(value_ptr, args...);
}
template<typename T, typename... Args>
in(T value, Args... args) {
hash_type = typeid(T).hash_code();
ptr = std::make_shared<std::vector<T>>(0);
add_strings(value, args...);
}
};
template<typename T>
bool operator==(T const& str, in const& val) {
if(val.hash_type == typeid(T).hash_code())
{
std::vector<T> &vec = *(std::vector<T>*)val.ptr.get();
for(auto &i : 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";
}
int a, b = 10;
if (b == in (1,2,10,3))
{
lang += " +100500";
}
std::cout << "lang = " << lang << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IGluIAp7CiBzdGQ6OnNoYXJlZF9wdHI8dm9pZD4gcHRyOwogc2l6ZV90IGhhc2hfdHlwZTsKIHZvaWQgYWRkX3N0cmluZ3MoKXt9CgoKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CiB2b2lkIGFkZF9zdHJpbmdzKFQgdmFsdWUsIEFyZ3MuLi4gYXJncykgewogCXN0ZDo6dmVjdG9yPFQ+ICZ2ZWMgPSAqKHN0ZDo6dmVjdG9yPFQ+KilwdHIuZ2V0KCk7CiAJdmVjLnB1c2hfYmFjayh2YWx1ZSk7CiAJYWRkX3N0cmluZ3MoYXJncy4uLik7CiB9CgkKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CiB2b2lkIGFkZF9zdHJpbmdzKGNoYXIgY29uc3QqY29uc3QgdmFsdWVfcHRyLCBBcmdzLi4uIGFyZ3MpIHsKIAlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJnZlYyA9ICooc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KilwdHIuZ2V0KCk7CiAJdmVjLnB1c2hfYmFjayhzdGQ6OnN0cmluZyh2YWx1ZV9wdHIpKTsKIAlhZGRfc3RyaW5ncyhhcmdzLi4uKTsKIH0JCiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CiBpbihjaGFyIGNvbnN0KmNvbnN0IHZhbHVlX3B0ciwgQXJncy4uLiBhcmdzKSB7IAogCWhhc2hfdHlwZSA9IHR5cGVpZChzdGQ6OnN0cmluZykuaGFzaF9jb2RlKCk7CiAJcHRyID0gc3RkOjptYWtlX3NoYXJlZDxzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+KDApOwogCWFkZF9zdHJpbmdzKHZhbHVlX3B0ciwgYXJncy4uLik7CiB9IAoKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CiBpbihUIHZhbHVlLCBBcmdzLi4uIGFyZ3MpIHsgCiAJaGFzaF90eXBlID0gdHlwZWlkKFQpLmhhc2hfY29kZSgpOwogCXB0ciA9IHN0ZDo6bWFrZV9zaGFyZWQ8c3RkOjp2ZWN0b3I8VD4+KDApOwogCWFkZF9zdHJpbmdzKHZhbHVlLCBhcmdzLi4uKTsKIH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmJvb2wgb3BlcmF0b3I9PShUIGNvbnN0JiBzdHIsIGluIGNvbnN0JiB2YWwpIHsKCWlmKHZhbC5oYXNoX3R5cGUgPT0gdHlwZWlkKFQpLmhhc2hfY29kZSgpKSAKCXsKCQlzdGQ6OnZlY3RvcjxUPiAmdmVjID0gKihzdGQ6OnZlY3RvcjxUPiopdmFsLnB0ci5nZXQoKTsKIAkJZm9yKGF1dG8gJmkgOiB2ZWMpIAogCQl7CiAJCQlpZihpID09IHN0cikKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQoJfQogCXJldHVybiBmYWxzZTsJCn0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmludCBtYWluKHZvaWQpIAp7CglzdGQ6OnN0cmluZyBsYW5nLCBjb3VudHJ5ID0gIkdCIjsKCglpZiAoY291bnRyeSA9PSBpbiAoIlVTIiwiR0IiLCJBVSIpKSAKCXsKCQlsYW5nPSJlbiI7Cgl9CgkKCWlmIChjb3VudHJ5ID09IGluICgxLDIsMykpIAoJewoJCWxhbmc9Imh6IjsKCX0KCQoJaW50IGEsIGIgPSAxMDsKCQoJaWYgKGIgPT0gaW4gKDEsMiwxMCwzKSkgCgl7CgkJbGFuZyArPSAiICsxMDA1MDAiOwoJfQoKCXN0ZDo6Y291dCA8PCAibGFuZyA9ICIgPDwgbGFuZyA8PCBzdGQ6OmVuZGw7CgoJcmV0dXJuIDA7Cn0K