21 Metaprogramming library [meta]
21.4 Compile-time rational arithmetic [ratio]
namespace std {
  
  template<intmax_t N, intmax_t D = 1> class ratio;
  
  template<class R1, class R2> using ratio_add = see below;
  template<class R1, class R2> using ratio_subtract = see below;
  template<class R1, class R2> using ratio_multiply = see below;
  template<class R1, class R2> using ratio_divide = see below;
  
  template<class R1, class R2> struct ratio_equal;
  template<class R1, class R2> struct ratio_not_equal;
  template<class R1, class R2> struct ratio_less;
  template<class R1, class R2> struct ratio_less_equal;
  template<class R1, class R2> struct ratio_greater;
  template<class R1, class R2> struct ratio_greater_equal;
  template<class R1, class R2>
    constexpr bool ratio_equal_v = ratio_equal<R1, R2>::value;
  template<class R1, class R2>
    constexpr bool ratio_not_equal_v = ratio_not_equal<R1, R2>::value;
  template<class R1, class R2>
    constexpr bool ratio_less_v = ratio_less<R1, R2>::value;
  template<class R1, class R2>
    constexpr bool ratio_less_equal_v = ratio_less_equal<R1, R2>::value;
  template<class R1, class R2>
    constexpr bool ratio_greater_v = ratio_greater<R1, R2>::value;
  template<class R1, class R2>
    constexpr bool ratio_greater_equal_v = ratio_greater_equal<R1, R2>::value;
  
  using quecto = ratio<1, 1'000'000'000'000'000'000'000'000'000'000>;     
  using ronto  = ratio<1,     1'000'000'000'000'000'000'000'000'000>;     
  using yocto  = ratio<1,         1'000'000'000'000'000'000'000'000>;     
  using zepto  = ratio<1,             1'000'000'000'000'000'000'000>;     
  using atto   = ratio<1,                 1'000'000'000'000'000'000>;
  using femto  = ratio<1,                     1'000'000'000'000'000>;
  using pico   = ratio<1,                         1'000'000'000'000>;
  using nano   = ratio<1,                             1'000'000'000>;
  using micro  = ratio<1,                                 1'000'000>;
  using milli  = ratio<1,                                     1'000>;
  using centi  = ratio<1,                                       100>;
  using deci   = ratio<1,                                        10>;
  using deca   = ratio<                                       10, 1>;
  using hecto  = ratio<                                      100, 1>;
  using kilo   = ratio<                                    1'000, 1>;
  using mega   = ratio<                                1'000'000, 1>;
  using giga   = ratio<                            1'000'000'000, 1>;
  using tera   = ratio<                        1'000'000'000'000, 1>;
  using peta   = ratio<                    1'000'000'000'000'000, 1>;
  using exa    = ratio<                1'000'000'000'000'000'000, 1>;
  using zetta  = ratio<            1'000'000'000'000'000'000'000, 1>;     
  using yotta  = ratio<        1'000'000'000'000'000'000'000'000, 1>;     
  using ronna  = ratio<    1'000'000'000'000'000'000'000'000'000, 1>;     
  using quetta = ratio<1'000'000'000'000'000'000'000'000'000'000, 1>;     
}