Lines Matching refs:Rhs
450 typename Rhs,
452 (MaxExponent<Lhs>::value > MaxExponent<Rhs>::value)
457 template <typename Lhs, typename Rhs>
458 struct MaxExponentPromotion<Lhs, Rhs, LEFT_PROMOTION> {
462 template <typename Lhs, typename Rhs>
463 struct MaxExponentPromotion<Lhs, Rhs, RIGHT_PROMOTION> {
464 using type = Rhs;
469 typename Rhs,
472 ? (std::is_signed<Rhs>::value
473 ? (MaxExponent<Lhs>::value > MaxExponent<Rhs>::value
477 : (std::is_signed<Rhs>::value
479 : (MaxExponent<Lhs>::value < MaxExponent<Rhs>::value
484 template <typename Lhs, typename Rhs>
485 struct LowestValuePromotion<Lhs, Rhs, LEFT_PROMOTION> {
489 template <typename Lhs, typename Rhs>
490 struct LowestValuePromotion<Lhs, Rhs, RIGHT_PROMOTION> {
491 using type = Rhs;
497 typename Rhs = Lhs,
499 std::is_integral<typename MaxExponentPromotion<Lhs, Rhs>::type>::value&&
500 IntegerBitsPlusSign<typename MaxExponentPromotion<Lhs, Rhs>::type>::
504 typename MaxExponentPromotion<Lhs, Rhs>::type,
507 typename MaxExponentPromotion<Lhs, Rhs>::type,
508 Rhs>::value == NUMERIC_RANGE_CONTAINED>
512 template <typename Lhs, typename Rhs, bool is_intmax_type>
513 struct BigEnoughPromotion<Lhs, Rhs, is_intmax_type, true> {
514 using type = typename MaxExponentPromotion<Lhs, Rhs>::type;
519 template <typename Lhs, typename Rhs>
520 struct BigEnoughPromotion<Lhs, Rhs, false, false> {
522 typename TwiceWiderInteger<typename MaxExponentPromotion<Lhs, Rhs>::type,
524 std::is_signed<Rhs>::value>::type;
529 template <typename Lhs, typename Rhs>
530 struct BigEnoughPromotion<Lhs, Rhs, true, false> {
531 using type = typename MaxExponentPromotion<Lhs, Rhs>::type;
539 template <typename T, typename Lhs, typename Rhs = Lhs>
544 !std::is_floating_point<Rhs>::value &&
547 std::is_signed<T>::value >= std::is_signed<Rhs>::value &&
548 IntegerBitsPlusSign<T>::value >= (2 * IntegerBitsPlusSign<Rhs>::value);
554 typename Rhs,
557 std::is_signed<Rhs>::value,
560 typename MaxExponentPromotion<Lhs, Rhs>::type>::value>
563 template <typename Lhs, typename Rhs>
564 struct FastIntegerArithmeticPromotion<Lhs, Rhs, true> {
566 typename TwiceWiderInteger<typename MaxExponentPromotion<Lhs, Rhs>::type,
568 std::is_signed<Rhs>::value>::type;
569 static_assert(IsIntegerArithmeticSafe<type, Lhs, Rhs>::value, "");
573 template <typename Lhs, typename Rhs>
574 struct FastIntegerArithmeticPromotion<Lhs, Rhs, false> {
575 using type = typename BigEnoughPromotion<Lhs, Rhs>::type;