Boost.Hana: std::ratio< Num, Denom > Class Template Reference

| Boost.Hana 1.0.0 Your standard library for metaprogramming |

std::ratio< Num, Denom > Class Template Reference
External adapters » Standard library adapters

## Description

### template<std::intmax_t Num, std::intmax_t Denom>
class std::ratio< Num, Denom >

Adaptation of `std::ratio` for Hana.

## Modeled concepts

1. `Comparable`
   `std::ratio`s are compared for equality using `std::ratio_equal`.
   // Copyright Louis Dionne 2013-2016
   // Distributed under the Boost Software License, Version 1.0.
   // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
   #include <boost/hana/assert.hpp>
   #include <boost/hana/equal.hpp>
   #include <boost/hana/ext/std/ratio.hpp>
   #include <boost/hana/not_equal.hpp>
   #include <ratio>
   namespace hana = boost::hana;
   BOOST_HANA_CONSTANT_CHECK(hana::equal(std::ratio<3, 4>{}, std::ratio<15, 20>{}));
   BOOST_HANA_CONSTANT_CHECK(hana::not_equal(std::ratio<3, 4>{}, std::ratio<3, 5>{}));
   int main() { }
2. `Orderable`
   `std::ratio`s are ordered using `std::ratio_less`.
   // Copyright Louis Dionne 2013-2016
   // Distributed under the Boost Software License, Version 1.0.
   // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
   #include <boost/hana/assert.hpp>
   #include <boost/hana/ext/std/ratio.hpp>
   #include <boost/hana/less.hpp>
   #include <boost/hana/less_equal.hpp>
   #include <ratio>
   namespace hana = boost::hana;
   BOOST_HANA_CONSTANT_CHECK(hana::less(std::ratio<3, 12>{}, std::ratio<5, 12>{}));
   BOOST_HANA_CONSTANT_CHECK(hana::less_equal(std::ratio<6, 12>{}, std::ratio<4, 8>{}));
   int main() { }
3. `Monoid`, `Group`, `Ring`, and `EuclideanRing`
   `std::ratio`s are added, subtracted, multiplied and divided using `std::ratio_add`, `std::ratio_subtract`, `std::ratio_multiply` and `std::ratio_divide`, respectively. Furthermore, the neutral element for the additive operation is `std::ratio<0, 1>{}`, and the neutral element for the multiplicative operation is `std::ratio<1, 1>{}`.
   // Copyright Louis Dionne 2013-2016
   // Distributed under the Boost Software License, Version 1.0.
   // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
   #include <boost/hana/assert.hpp>
   #include <boost/hana/div.hpp>
   #include <boost/hana/equal.hpp>
   #include <boost/hana/ext/std/ratio.hpp>
   #include <boost/hana/minus.hpp>
   #include <boost/hana/mod.hpp>
   #include <boost/hana/mult.hpp>
   #include <boost/hana/one.hpp>
   #include <boost/hana/plus.hpp>
   #include <boost/hana/zero.hpp>
   #include <ratio>
   namespace hana = boost::hana;
   BOOST_HANA_CONSTANT_CHECK(hana::equal(
   hana::plus(std::ratio<5, 3>{}, std::ratio<3, 12>{}),
   std::ratio<23, 12>{}
   ));
   BOOST_HANA_CONSTANT_CHECK(hana::equal(
   hana::minus(std::ratio<5, 3>{}, std::ratio<3, 13>{}),
   std::ratio<56, 39>{}
   ));
   BOOST_HANA_CONSTANT_CHECK(hana::equal(
   hana::mult(std::ratio<5, 3>{}, std::ratio<3, 13>{}),
   std::ratio<15, 39>{}
   ));
   BOOST_HANA_CONSTANT_CHECK(hana::equal(
   hana::div(std::ratio<5, 3>{}, std::ratio<3, 13>{}),
   std::ratio<65, 9>{}
   ));
   // The mod of two ratios is always 0, because they can always be
   // divided without remainder.
   BOOST_HANA_CONSTANT_CHECK(hana::equal(
   hana::mod(std::ratio<5, 3>{}, std::ratio<3, 13>{}),
   std::ratio<0>{}
   ));
   BOOST_HANA_CONSTANT_CHECK(hana::equal(
   hana::zero<hana::ext::std::ratio_tag>(),
   std::ratio<0>{}
   ));
   BOOST_HANA_CONSTANT_CHECK(hana::equal(
   hana::one<hana::ext::std::ratio_tag>(),
   std::ratio<1>{}
   ));
   int main() { }