template<bool B, class T, class F>
struct conditional; 如果B为true,则conditional::type为T,否则为F。
typedef conditional<(sizeof(long long) > sizeof(long double)),
long long, long double>::type max_size;
cout << typeid(max_size).name() << endl; //long double
template<class F, class... Args>
class result_of<F(Args...)>;
用来在编译期获取一个可调用对象的返回类型。
typedef std::conditional<true, int, float>::type A; //int
typedef std::conditional<false, int, float>::type B; //float