23 General utilities library [utilities]

23.16 Compile-time rational arithmetic [ratio]

23.16.5 Comparison of ratios [ratio.comparison]

template <class R1, class R2> struct ratio_equal : bool_constant<R1::num == R2::num && R1::den == R2::den> { };

template <class R1, class R2> struct ratio_not_equal : bool_constant<!ratio_equal_v<R1, R2>> { };

template <class R1, class R2> struct ratio_less : bool_constant<see below> { };

Если R1​::​num × R2​::​den меньше R2​::​num × R1​::​den, ratio_­less<R1, R2> должно быть производным от bool_­constant<true>; в противном случае он должен быть получен из bool_­constant<false>. Реализации могут использовать другие алгоритмы для вычисления этого отношения, чтобы избежать переполнения. Если происходит переполнение, программа имеет неправильный формат.

template <class R1, class R2> struct ratio_less_equal : bool_constant<!ratio_less_v<R2, R1>> { };

template <class R1, class R2> struct ratio_greater : bool_constant<ratio_less_v<R2, R1>> { };

template <class R1, class R2> struct ratio_greater_equal : bool_constant<!ratio_less_v<R1, R2>> { };