#include <iostream>
#include <string>
#include <typeinfo>
template <typename T>
std::string the_type(T a_variable) {
std::string r_string;
if (typeid(T) == typeid(std::string)) {
if (reinterpret_cast<std::string&>(a_variable) == "1") {
r_string = "a string containing 1";
} else {
r_string = "just a string";
}
}
else {
r_string = "not a string";
}
return r_string;
}
int main()
{
int i = 1;
std::cout << the_type(i) << std::endl;
char c[] = "121345";
std::cout << the_type(c) << std::endl;
std::string s = "121345";
std::cout << the_type(s) << std::endl;
s = "1";
std::cout << the_type(s) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHlwZWluZm8+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RkOjpzdHJpbmcgdGhlX3R5cGUoVCBhX3ZhcmlhYmxlKSB7CglzdGQ6OnN0cmluZyByX3N0cmluZzsKCglpZiAodHlwZWlkKFQpID09IHR5cGVpZChzdGQ6OnN0cmluZykpIHsKCQlpZiAocmVpbnRlcnByZXRfY2FzdDxzdGQ6OnN0cmluZyY+KGFfdmFyaWFibGUpID09ICIxIikgewoJCQlyX3N0cmluZyA9ICJhIHN0cmluZyBjb250YWluaW5nIDEiOwoJCX0gZWxzZSB7CgkJCXJfc3RyaW5nID0gImp1c3QgYSBzdHJpbmciOwoJCX0KCX0KCWVsc2UgewoJCXJfc3RyaW5nID0gIm5vdCBhIHN0cmluZyI7Cgl9CgoJcmV0dXJuIHJfc3RyaW5nOwp9CgppbnQgbWFpbigpCnsKCWludCBpID0gMTsKCXN0ZDo6Y291dCA8PCB0aGVfdHlwZShpKSA8PCBzdGQ6OmVuZGw7CgoJY2hhciBjW10gPSAiMTIxMzQ1IjsKCXN0ZDo6Y291dCA8PCB0aGVfdHlwZShjKSA8PCBzdGQ6OmVuZGw7CgoJc3RkOjpzdHJpbmcgcyA9ICIxMjEzNDUiOwoJc3RkOjpjb3V0IDw8IHRoZV90eXBlKHMpIDw8IHN0ZDo6ZW5kbDsKCglzID0gIjEiOwoJc3RkOjpjb3V0IDw8IHRoZV90eXBlKHMpIDw8IHN0ZDo6ZW5kbDsKCglyZXR1cm4gMDsKfQ==