#include <typeinfo>
#include <iostream>
int a;
struct foo { } b;
template<typename T, T* val>
struct get_type
{
typedef T type;
};
int main()
{
std::cout << typeid(get_type<int, &a>::type).name() << "\n";
std::cout << typeid(get_type<foo, &b>::type).name() << "\n";
}
I2luY2x1ZGUgPHR5cGVpbmZvPgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgYTsKc3RydWN0IGZvbyB7IH0gYjsKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIFQqIHZhbD4Kc3RydWN0IGdldF90eXBlCnsKICAgICAgICB0eXBlZGVmIFQgdHlwZTsKfTsKCmludCBtYWluKCkKewogICAgICAgIHN0ZDo6Y291dCA8PCB0eXBlaWQoZ2V0X3R5cGU8aW50LCAmYT46OnR5cGUpLm5hbWUoKSA8PCAiXG4iOwogICAgICAgIHN0ZDo6Y291dCA8PCB0eXBlaWQoZ2V0X3R5cGU8Zm9vLCAmYj46OnR5cGUpLm5hbWUoKSA8PCAiXG4iOwp9Cg==