template <typename Lhs, typename Rhs, ArithmeticPromotionCategory Promotion =
              (MaxExponent<Lhs>::value > MaxExponent<Rhs>::value)
                  ? LEFT_PROMOTION
                  : RIGHT_PROMOTION>

struct MaxExponentPromotion

Determines the type that can represent the largest positive value.