类型std::conditional在标准库头<type_traits>可以选择一种类型的或其他,基于编译时布尔值:
template<typename T> struct ValueOrPointer { typename std::conditional<(sizeof(T) > sizeof(void*)), T*, T>::type vop; };
该结构包含一个指向TifT大于指针大小的指针,或者包含一个T小于或等于指针大小的指针。因此sizeof(ValueOrPointer)将始终为<= sizeof(void*)。