
std::common_type is a trait from the standard library. This trait allows you to pass an arbitrary number of types, processes them, and outputs their common type. std::common_type became first available in the C++11 standard. When obtaining a common type, std::common_type relies upon the conditional operator and does some conversions we'll review below.
namespace std
{
template <typename ...>
struct common_type;                                      // (1)
template <typename ...Ts>
using common_type_t = typename common_type<Ts...>::type;
template <>
struct common_type<>                                     // (2)
{
};
template <class T>
struct common_type<T>                                    // (3)
{
  using type = std::decay_t<T>;
};
template <class T, class U>
struct common_type<T, U>                                 // (4)
{
  using type = decay_t<decltype( true ? declval< std::decay_t<T> >()
                                      : declval< std::decay_t<U> >() ) >;
};
template <class T, class U, class ...V>
struct common_type<T, U, V...>                           // (5)
{
  using type = typename common_type<typename common_type<T, U>::type,
                                    V...>::type;
};
}It's worth mentioning that common_type is implemented in the standard library in a similar way. Now let's examine the code above and see what happens there:
Helpful links
0