std :: common_type implementación
Solo para ver cómo funcionaba, observé la implementación libstdc ++ destd::common_type
en el encabezadotype_traits
. Tengo que admitir que realmente no entiendo cómo funciona. Aquí está:
/// common_type
template<typename... _Tp>
struct common_type;
template<typename _Tp>
struct common_type<_Tp>
{ typedef _Tp type; };
template<typename _Tp, typename _Up>
struct common_type<_Tp, _Up>
{ typedef decltype(true ? declval<_Tp>() : declval<_Up>()) type; };
template<typename _Tp, typename _Up, typename... _Vp>
struct common_type<_Tp, _Up, _Vp...>
{
typedef typename
common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
};
Entiendo bien cómo funcionan las declaraciones primera, segunda y cuarta. Sin embargo, no logro entender cómo funciona la tercera declaración. ¿Podría alguien tratar de explicar el mecanismo utilizado aquí?