#include template struct largest_type { using type = std::conditional_t< (sizeof(Type) > sizeof(typename largest_type::type)), Type, typename largest_type::type >; }; template struct largest_type { using type = Type; }; template using largest_type_t = typename largest_type::type; int main() { static_assert( std::is_same_v< largest_type::type, int > ); static_assert( std::is_same_v< largest_type_t, int > ); static_assert( std::is_same_v< largest_type_t, int > ); static_assert( std::is_same_v< largest_type_t, double > ); }