#include <iostream>
#include <type_traits>
template<int I,class T>
struct static_case {
static constexpr int value = I;
using type = T;
};
template<int I, class DefaultType, class Case1, class... OtherCases>
struct static_switch{
using type = typename std::conditional< I==Case1::value ,
typename Case1::type,
typename static_switch<I,DefaultType,OtherCases...>::type
>::type;
};
template<int I, class DefaultType, class LastCase>
struct static_switch<I,DefaultType,LastCase> {
using type = typename std::conditional< I==LastCase::value ,
typename LastCase::type,
DefaultType
>::type;
};
template<class T>
typename static_switch<sizeof(T)
,int // default case
,static_case<sizeof(char),char>
,static_case<sizeof(short),short>
,static_case<sizeof(long),long>
,static_case<sizeof(long long),long long>
>::type foo(T bar){ return reinterpret_cast<decltype(foo(bar))&>(bar);}
auto val = foo(13.0);
static_assert(std::is_same<long long, decltype(val)>::value,"Not converted to long long!");
using namespace std;
int main() {
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+IAogCnRlbXBsYXRlPGludCBJLGNsYXNzIFQ+IApzdHJ1Y3Qgc3RhdGljX2Nhc2UgeyAKCXN0YXRpYyBjb25zdGV4cHIgaW50IHZhbHVlID0gSTsgCgl1c2luZyB0eXBlID0gVDsgCn07IAoKCnRlbXBsYXRlPGludCBJLCBjbGFzcyBEZWZhdWx0VHlwZSwgY2xhc3MgQ2FzZTEsIGNsYXNzLi4uIE90aGVyQ2FzZXM+IApzdHJ1Y3Qgc3RhdGljX3N3aXRjaHsgCgl1c2luZyB0eXBlID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwgST09Q2FzZTE6OnZhbHVlICwgIAoJCQkJCXR5cGVuYW1lIENhc2UxOjp0eXBlLCAKCQkJCQl0eXBlbmFtZSBzdGF0aWNfc3dpdGNoPEksRGVmYXVsdFR5cGUsT3RoZXJDYXNlcy4uLj46OnR5cGUgCgkJCQkgICAgID46OnR5cGU7IAp9OyAKCiAKdGVtcGxhdGU8aW50IEksIGNsYXNzIERlZmF1bHRUeXBlLCBjbGFzcyBMYXN0Q2FzZT4gCnN0cnVjdCBzdGF0aWNfc3dpdGNoPEksRGVmYXVsdFR5cGUsTGFzdENhc2U+IHsgCgl1c2luZyB0eXBlID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwgST09TGFzdENhc2U6OnZhbHVlICwgIAoJCQkJCXR5cGVuYW1lIExhc3RDYXNlOjp0eXBlLCAKCQkJCQlEZWZhdWx0VHlwZSAKCQkJCSAgICAgPjo6dHlwZTsgCn07IAoKCnRlbXBsYXRlPGNsYXNzIFQ+CnR5cGVuYW1lIHN0YXRpY19zd2l0Y2g8c2l6ZW9mKFQpCiAgICAgICAgICAgICxpbnQgLy8gZGVmYXVsdCBjYXNlCiAgICAgICAgICAgICxzdGF0aWNfY2FzZTxzaXplb2YoY2hhciksY2hhcj4KICAgICAgICAgICAgLHN0YXRpY19jYXNlPHNpemVvZihzaG9ydCksc2hvcnQ+CiAgICAgICAgICAgICxzdGF0aWNfY2FzZTxzaXplb2YobG9uZyksbG9uZz4KICAgICAgICAgICAgLHN0YXRpY19jYXNlPHNpemVvZihsb25nIGxvbmcpLGxvbmcgbG9uZz4KICAgICAgICAgICAgPjo6dHlwZSBmb28oVCBiYXIpeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxkZWNsdHlwZShmb28oYmFyKSkmPihiYXIpO30KCgphdXRvIHZhbCA9IGZvbygxMy4wKTsKc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8bG9uZyBsb25nLCBkZWNsdHlwZSh2YWwpPjo6dmFsdWUsIk5vdCBjb252ZXJ0ZWQgdG8gbG9uZyBsb25nISIpOwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=