Equivalent to std::common_type, except it is SFINAE-friendly and does not support custom specializations.
std::common_type