#include <iostream>
template<typename T>
inline int get_int(T const& in)
{
std::cout << "In get_int!\n";
return in;
}
inline int get_int(char const& in)
{
std::cout << "In get_int(char)!\n";
return static_cast<int>(in);
}
inline unsigned int get_int(unsigned char const& in)
{
std::cout << "In get_int(unsigned char)!\n";
return static_cast<unsigned int>(in);
}
template<typename T>
void go(T const& arg)
{
auto result = get_int(arg);
std::cout << "The integer is " << result << "\n";
}
int main()
{
go(static_cast<unsigned char>('a'));
go('a');
go(42);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KaW5saW5lIGludCBnZXRfaW50KFQgY29uc3QmIGluKQp7CiAgICBzdGQ6OmNvdXQgPDwgIkluIGdldF9pbnQhXG4iOwogICAgcmV0dXJuIGluOwp9CgppbmxpbmUgaW50IGdldF9pbnQoY2hhciBjb25zdCYgaW4pCnsKICAgIHN0ZDo6Y291dCA8PCAiSW4gZ2V0X2ludChjaGFyKSFcbiI7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihpbik7Cn0KCmlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2ludCh1bnNpZ25lZCBjaGFyIGNvbnN0JiBpbikKewogICAgc3RkOjpjb3V0IDw8ICJJbiBnZXRfaW50KHVuc2lnbmVkIGNoYXIpIVxuIjsKICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBnbyhUIGNvbnN0JiBhcmcpCnsKICAgIGF1dG8gcmVzdWx0ID0gZ2V0X2ludChhcmcpOwogICAgc3RkOjpjb3V0IDw8ICJUaGUgaW50ZWdlciBpcyAiIDw8IHJlc3VsdCA8PCAiXG4iOwp9CgppbnQgbWFpbigpCnsKICAgIGdvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCdhJykpOwogICAgZ28oJ2EnKTsKICAgIGdvKDQyKTsKfQo=