#include <iostream>
#include <typeinfo>
#include <type_traits>
using namespace std;
// Unspecialized version
template<typename...Ts>
struct Tmin
{
using type = void;
};
template<typename T>
struct Tmin<T>
{
using type = T;
};
template<typename T1, typename T2, typename...Ts>
struct Tmin<T1, T2, Ts...>
{
using type = typename std::conditional<sizeof(T1) < sizeof(T2),
typename Tmin<T1, Ts...>::type, typename Tmin<T2, Ts...>::type
>::type;
};
int main()
{
cout << typeid(Tmin<float, int, double>::type).name() << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLwlVbnNwZWNpYWxpemVkIHZlcnNpb24KdGVtcGxhdGU8dHlwZW5hbWUuLi5Ucz4Kc3RydWN0IFRtaW4KeyAKCXVzaW5nIHR5cGUgPSB2b2lkOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IFRtaW48VD4KewoJdXNpbmcgdHlwZSA9IFQ7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lLi4uVHM+CnN0cnVjdCBUbWluPFQxLCBUMiwgVHMuLi4+CnsKCXVzaW5nIHR5cGUgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHNpemVvZihUMSkgPCBzaXplb2YoVDIpLCAKCQl0eXBlbmFtZSBUbWluPFQxLCBUcy4uLj46OnR5cGUsIHR5cGVuYW1lIFRtaW48VDIsIFRzLi4uPjo6dHlwZQoJCT46OnR5cGU7Cn07CgppbnQgbWFpbigpCnsKCWNvdXQgPDwgdHlwZWlkKFRtaW48ZmxvYXQsIGludCwgZG91YmxlPjo6dHlwZSkubmFtZSgpIDw8IGVuZGw7CgoJcmV0dXJuIDA7Cn0KCgoK