#include <iostream>
#include <typeinfo>
template <typename T>
struct Type
{
static char const* name()
{
return typeid(T).name();
}
};
template <>
struct Type<int>
{
static char const* name()
{
return "[[int]]";
}
};
template <typename T>
void foo(T t)
{
std::cout <<"type:" <<Type<T>::name() << std::endl;
std::cout <<"value:" << t << std::endl;
}
int main() {
// your code goes here
foo('a');
unsigned char a;
foo(a -1);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2luY2x1ZGUgPHR5cGVpbmZvPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBUeXBlCnsKCXN0YXRpYyBjaGFyIGNvbnN0KiBuYW1lKCkgCgl7CgkgICByZXR1cm4gdHlwZWlkKFQpLm5hbWUoKTsJCgl9Cn07CgoKdGVtcGxhdGUgPD4Kc3RydWN0IFR5cGU8aW50Pgp7CglzdGF0aWMgY2hhciBjb25zdCogbmFtZSgpIAoJewoJICAgcmV0dXJuICJbW2ludF1dIjsKCX0KfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGZvbyhUIHQpCnsKCXN0ZDo6Y291dCA8PCJ0eXBlOiIgPDxUeXBlPFQ+OjpuYW1lKCkgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8InZhbHVlOiIgPDwgdCA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJZm9vKCdhJyk7Cgl1bnNpZ25lZCBjaGFyIGE7Cglmb28oYSAtMSk7CglyZXR1cm4gMDsKfQ==