Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r67787 - trunk/libs/ratio/doc
From: vicente.botet_at_[hidden]
Date: 2011-01-08 11:57:53


Author: viboes
Date: 2011-01-08 11:57:51 EST (Sat, 08 Jan 2011)
New Revision: 67787
URL: http://svn.boost.org/trac/boost/changeset/67787

Log:
Boost.Ratio: Update doc with new Rational Constant feature

Binary files modified:
   trunk/libs/ratio/doc/ratio.pdf
Text files modified:
   trunk/libs/ratio/doc/ratio.qbk | 427 +++++++++++++++++++++++++++++++++++----
   1 files changed, 375 insertions(+), 52 deletions(-)

Modified: trunk/libs/ratio/doc/ratio.pdf
==============================================================================
Binary files. No diff available.

Modified: trunk/libs/ratio/doc/ratio.qbk
==============================================================================
--- trunk/libs/ratio/doc/ratio.qbk (original)
+++ trunk/libs/ratio/doc/ratio.qbk 2011-01-08 11:57:51 EST (Sat, 08 Jan 2011)
@@ -9,7 +9,7 @@
 
 [article Boost.Ratio
     [quickbook 1.5]
- [version 1.0.0]
+ [version 1.0.1]
     [authors [Hinnant, Howard]]
     [authors [Dawes, Beman]]
     [authors [Botet Escriba, Vicente J.]]
@@ -24,7 +24,7 @@
 ]
 
 [/==================]
-[def __Boost_Ratio__ [*Boost.Ratio]]
+[def __Boost_Ratio [*Boost.Ratio]]
 
 [/===============================================]
 
@@ -45,6 +45,11 @@
 [def __ratio_subtract [link boost_ratio.reference.ratio_hpp.ratio_arithmetic `ratio_subtract`]]
 [def __ratio_multiply [link boost_ratio.reference.ratio_hpp.ratio_arithmetic `ratio_multiply`]]
 [def __ratio_divide [link boost_ratio.reference.ratio_hpp.ratio_arithmetic `ratio_divide`]]
+[def __ratio_negate [link boost_ratio.reference.ratio_hpp.ratio_arithmetic `ratio_negate`]]
+[def __ratio_abs [link boost_ratio.reference.ratio_hpp.ratio_arithmetic `ratio_abs`]]
+[def __ratio_sign [link boost_ratio.reference.ratio_hpp.ratio_arithmetic `ratio_sign`]]
+[def __ratio_gcd [link boost_ratio.reference.ratio_hpp.ratio_arithmetic `ratio_gcd`]]
+[def __ratio_lcm [link boost_ratio.reference.ratio_hpp.ratio_arithmetic `ratio_lcm`]]
 
 
 [template ratio_comparison[link_text] [link boost_ratio.reference.ratio_hpp.ratio_comparison [link_text]]]
@@ -76,6 +81,9 @@
 
 [template mu[]'''μ'''] [/ µ Greek small letter mu]
 
+[def __Rational_Constant [link boost_ratio.reference.rational_constant Rational Constant]]
+
+
 [/warning Ratio is not part of the Boost libraries.]
 
 [/===============]
@@ -109,7 +117,7 @@
 [section Motivation]
 [/=================]
 
-__Boost_Ratio__ aims to implement the compile time ratio facility in C++0x, as proposed in [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm [*N2661 - A Foundation to Sleep On]]. That document provides background and motivation for key design decisions and is the source of a good deal of information in this documentation.
+__Boost_Ratio aims to implement the compile time ratio facility in C++0x, as proposed in [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm [*N2661 - A Foundation to Sleep On]]. That document provides background and motivation for key design decisions and is the source of a good deal of information in this documentation.
 
 [endsect]
 
@@ -117,12 +125,14 @@
 [section Description]
 [/==================]
 
-The __Boost_Ratio__ library provides:
+The __Boost_Ratio library provides:
 
 * A class template, __ratio, for specifying compile time rational constants such as 1/3 of a nanosecond or the number of inches per meter. __ratio represents a compile time ratio of compile time constants with support for compile time arithmetic with overflow and division by zero protection.
 
 * It provides a textual representation of `boost::ratio<N, D>` in the form of a `std::basic_string` which can be useful for I/O.
 
+* Some extension related to the __Rational_Constant concept enabling the use of __ratio<> in the context of [*Boost.MPL] numeric metafunctions.
+
 [endsect]
 
 [endsect]
@@ -146,7 +156,7 @@
 
 Boost.Ratio is in the latest Boost release in the folder `/boost/ratio`. Documentation, tests and examples folder are at `boost/libs/ratio/`.
 
-You can also access the latest (unstable?) state from the [@https://svn.boost.org/svn/boost-trunk/ratio Boost trunk] directories boost/ratio and libs/ratio. Just go to [@http://svn.boost.org/trac/boost/wiki/BoostSubversion here] and follow the instructions there for anonymous SVN access.
+You can also access the latest (unstable?) state from the [@https://svn.boost.org/svn/boost-trunk Boost trunk] directories boost/ratio and libs/ratio. Just go to [@http://svn.boost.org/trac/boost/wiki/BoostSubversion here] and follow the instructions there for anonymous SVN access.
 
 [/==========================================]
 [heading Where to install Boost.Ratio? ]
@@ -158,16 +168,16 @@
 [heading Building Boost.Ratio ]
 [/=================================]
 
-__Boost_Ratio__ is a header only library, so no need to compile anything, you just need to `include <boost/ratio.hpp>`.
+__Boost_Ratio is a header only library, so no need to compile anything, you just need to `include <boost/ratio.hpp>`.
 
 
 [/===================]
 [heading Requirements]
 [/===================]
 
-__Boost_Ratio__ depends on some Boost libraries. For these specific parts you must use either Boost version 1.39.0 or later (even older versions may work).
+__Boost_Ratio depends on some Boost libraries. For these specific parts you must use either Boost version 1.39.0 or later (even older versions may work).
 
-In particular, __Boost_Ratio__ depends on:
+In particular, __Boost_Ratio depends on:
 
 [variablelist
 [
@@ -192,7 +202,7 @@
 
 
 [/=========================================================]
-[heading Building an executable that uses __Boost_Ratio__ ]
+[heading Building an executable that uses __Boost_Ratio ]
 [/=========================================================]
 
 No link is needed.
@@ -214,7 +224,7 @@
 [heading Tested compilers ]
 [/========================]
 
-__Boost_Ratio__ should work with an C++03 conforming compiler. The current version has been tested on:
+__Boost_Ratio should work with an C++03 conforming compiler. The current version has been tested on:
 
 Windows with
 
@@ -222,23 +232,23 @@
 * MSVC 9.0 Express
 * MSVC 8.0
 
-[/* Intel 11.0]
+Cygwin 1.5 with
 
-Scientific Linux with
-
-* GCC 4.1.2
+* GCC 3.4.4
 
-Cygwin with
+Cygwin 1.7 with
 
-* GCC 3.4.4
-* GCC 4.3.2
+* GCC 4.3.4
 
 MinGW with
 
 * GCC 4.4.0
 * GCC 4.5.0
+* GCC 4.5.0 -std=c++0x
+* GCC 4.6.0
+* GCC 4.6.0 -std=c++0x
 
-Initial version was tested on:
+Initial versions were tested on:
 
 MacOS with GCC 4.2.4
 
@@ -249,18 +259,6 @@
 [note Please send any questions, comments and bug reports to boost <at> lists <dot> boost <dot> org.]
 
 [endsect]
-[/
-[/====================]
-[section Hello World! ]
-[/====================]
-
-If all you want to do is to time a program's execution, here is a complete program (stopclock_example.cpp):
-
- #include <boost/ratio.hpp>
-
-
-[endsect]
-]
 [endsect]
 
 
@@ -342,7 +340,19 @@
     ratio_string<giga, char>::short_name() = G
     ratio_string<ratio<4, 6>, char>::long_name() = [2/3]
     ratio_string<ratio<4, 6>, char>::short_name() = [2/3]
+
+
+[heading Ratio MPL Numeric Metafunctions]
+
+With the view of the _ratio class as a __Rational_Constant we can mix _ratio<> and [*Boost.MPL] Integral Constants in the same expression, as in
+
+ typedef mpl::times<int_<5>, giga>::type _5giga;
+ // _5giga::num == 5000000000, _5giga::den == 1
     
+ typedef mpl::times<int_<5>, nano>::type _5nano;
+ // _5nano::num == 1, _5nano::den == 200000000
+
+
 [endsect]
 [/===============]
 [section:Examples Example]
@@ -352,9 +362,9 @@
 [section SI units]
 [/===============]
 
-This example illustrates the use of type-safe physics code interoperating with `boost::chrono::duration` types, taking advantage of the __Boost_Ratio__ infrastructure and design philosophy.
+This example illustrates the use of type-safe physics code interoperating with `boost::chrono::duration` types, taking advantage of the __Boost_Ratio infrastructure and design philosophy.
 
-Let's start by defining a `length` class template that mimics `boost::chrono::duration`, which represents a time duration in various units, but restricts the representation to `double` and uses __Boost_Ratio__ for length unit conversions:
+Let's start by defining a `length` class template that mimics `boost::chrono::duration`, which represents a time duration in various units, but restricts the representation to `double` and uses __Boost_Ratio for length unit conversions:
 
 
     template <class Ratio>
@@ -611,11 +621,23 @@
 [section:reference Reference ]
 [/=================]
 
-[/===========================================]
-[section:ratio_fwdhpp Header `<boost/ratio_fwd.hpp>`]
-[/===========================================]
+[/=================================================]
+[section:ratio_ratio_hpp Header `<boost/ratio.hpp>`]
+[/=================================================]
 
-This header provides forward declarations for the `<boost/ratio.hpp>` file.
+This header includes all the ratio related header files
+
+ #include <boost/ratio/ratio.hpp>
+ #include <boost/ratio/ratio_io.hpp>
+ #include <boost/ratio/rational_constant.hpp>
+
+[endsect]
+
+[/========================================================]
+[section:ratio_fwdhpp Header `<boost/ratio/ratio_fwd.hpp>`]
+[/========================================================]
+
+This header provides forward declarations for the `<boost/ratio/ratio.hpp>` file.
 
     namespace boost {
 
@@ -626,6 +648,11 @@
         template <class R1, class R2> struct __ratio_subtract;
         template <class R1, class R2> struct __ratio_multiply;
         template <class R1, class R2> struct __ratio_divide;
+ template <class R> struct __ratio_negate;
+ template <class R> struct __ratio_sign;
+ template <class R> struct __ratio_abs;
+ template <class R1, class R2> struct __ratio_gcd;
+ template <class R1, class R2> struct __ratio_lcm;
 
         // ratio comparison
         template <class R1, class R2> struct __ratio_equal;
@@ -656,9 +683,9 @@
 
 [endsect]
 
-[/===========================================]
-[section:ratio_hpp Header `<boost/ratio.hpp>`]
-[/===========================================]
+[/=================================================]
+[section:ratio_hpp Header `<boost/ratio/ratio.hpp>`]
+[/=================================================]
 
 __ratio is a facility which is useful in specifying compile-time rational constants. Compile-time rational arithmetic is supported with protection against overflow and divide by zero. Such a facility is very handy to efficiently represent 1/3 of a nanosecond, or to specify an inch in terms of meters (for example 254/10000 meters - which __ratio will reduce to 127/5000 meters).
 
@@ -666,6 +693,7 @@
     #define __BOOST_RATIO_USES_STATIC_ASSERT
     #define __BOOST_RATIO_USES_MPL_ASSERT
     #define __BOOST_RATIO_USES_ARRAY_ASSERT
+ #define __BOOST_RATIO_EXTENSIONS
 
 
 [section:conf Configuration Macros]
@@ -673,8 +701,8 @@
 When BOOST_NO_STATIC_ASSERT is defined, the user can select the way static assertions are reported. Define
 
 * BOOST_RATIO_USES_STATIC_ASSERT to use Boost.StaticAssert.
-* BOOST_RATIO_USES_MPL_ASSERT to use Boost.MPL static assertions.
-* BOOST_RATIO_USES_RATIO_ASSERT to use __Boost_Ratio__ static assertions.
+* BOOST_RATIO_USES_MPL_ASSERT to use [*Boost.MPL] static assertions.
+* BOOST_RATIO_USES_RATIO_ASSERT to use __Boost_Ratio static assertions.
 
 The default behavior is as if BOOST_RATIO_USES_ARRAY_ASSERT is defined.
 
@@ -690,6 +718,9 @@
 
 Depending upon the static assertion system used, a hint as to the failing assertion will appear in some form in the compiler diagnostic output.
 
+When BOOST_RATIO_EXTENSIONS is defined, __Boost_Ratio provides in addition some extenion to the C++ standard, see below.
+
+
 [endsect]
 
 [section:ratio Class Template `ratio<>`]
@@ -701,13 +732,23 @@
             static const boost::intmax_t den;
             typedef ratio<num, den> type;
 
+ #ifdef BOOST_RATIO_EXTENSIONS
+ typedef mpl::rational_c_tag tag;
+ typedef boost::rational<boost::intmax_t> value_type;
+ typedef boost::intmax_t num_type;
+ typedef boost::intmax_t den_type;
+
             ratio() = default;
 
             template <intmax_t _N2, intmax_t _D2>
             ratio(const ratio<_N2, _D2>&);
 
             template <intmax_t _N2, intmax_t _D2>
- ratio& operator=(const ratio<_N2, _D2>&) {return *this;}
+ ratio& operator=(const ratio<_N2, _D2>&);
+
+ static value_type value();
+ value_type operator()() const;
+ #endif
         };
 
 A diagnostic will be emitted if __ratio is instantiated with `D == 0`, or if the absolute value of `N` or `D` cannot be represented. [*Note:] These rules ensure that infinite ratios are avoided and that for any negative input, there exists a representable value of its absolute value which is positive. In a two's complement representation, this excludes the most negative value.
@@ -725,6 +766,16 @@
 
 [section:ca Construction and Assignment]
 
+Included only if BOOST_RATIO_EXTENSIONS is defined.
+
+[heading Default Constructor]
+
+ ratio()=default;
+
+[*Effects:] Constructs a __ratio object.
+
+[heading Copy Constructor]
+
     template <intmax_t N2, intmax_t D2>
       ratio(const __ratio<N2, D2>& r);
 
@@ -732,6 +783,8 @@
 
 [*Remarks:] This constructor will not participate in overload resolution unless `r` has the same normalized form as `*this`.
 
+[heading Assignement]
+
     template <intmax_t N2, intmax_t D2>
       __ratio& operator=(const __ratio<N2, D2>& r);
 
@@ -743,6 +796,28 @@
 
 [endsect]
 
+[section:mpl MPL Numeric Metafunctions]
+
+Included only if BOOST_RATIO_EXTENSIONS is defined.
+
+In order to work with [*Boost.MPL] numeric metafunctions as a __Rational_Constant, the following has beed added:
+
+ typedef mpl::rational_c_tag tag;
+ typedef boost::rational<boost::intmax_t> value_type;
+ typedef boost::intmax_t num_type;
+ typedef boost::intmax_t den_type;
+[endsect]
+
+[section:obs Observers]
+
+Included only if BOOST_RATIO_EXTENSIONS is defined.
+
+ static value_type value();
+ value_type operator()() const;
+
+[*Returns:] value_type(num,den);
+
+[endsect]
 
 [endsect]
 
@@ -783,6 +858,57 @@
 
 The nested typedef `type` is a synonym for `__ratio<R1::num * R2::den, R2::num * R1::den>::type`.
 
+[heading `ratio_negate<>`]
+
+This extension of the C++ standard helps in the definition of some [*Boost.MPL] numeric metafunctions.
+
+
+ template <class R> struct ratio_negate {
+ typedef [/see below] type;
+ };
+
+The nested typedef `type` is a synonym for `__ratio<-R::num, R::den>::type`.
+
+[heading `ratio_abs<>`]
+
+This extension of the C++ standard helps in the definition of some [*Boost.MPL] numeric metafunctions.
+
+ template <class R> struct ratio_abs {
+ typedef [/see below] type;
+ };
+
+The nested typedef `type` is a synonym for `__ratio<abs_c<intmax_t,R::num>::value, R::den>::type`.
+
+[heading `ratio_sign<>`]
+
+This extension of the C++ standard helps in the definition of some [*Boost.MPL] numeric metafunctions.
+
+ template <class R> struct ratio_sign {
+ typedef [/see below] type;
+ };
+
+The nested typedef `type` is a synonym for `sign_c<intmax_t,R::num>::type`.
+
+[heading `ratio_gcd<>`]
+
+This extension of the C++ standard helps in the definition of some [*Boost.MPL] numeric metafunctions.
+
+ template <class R1, class R2> struct ratio_gcd {
+ typedef [/see below] type;
+ };
+
+The nested typedef `type` is a synonym for `ratio<gcd_c<intmax_t, R1::num, R2::num>::value, mpl::lcm_c<intmax_t, R1::den, R2::den>::value>::type`.
+
+[heading `ratio_lcm<>`]
+
+This extension of the C++ standard helps in the definition of some [*Boost.MPL] numeric metafunctions.
+
+ template <class R1, class R2> struct ratio_lcm {
+ typedef [/see below] type;
+ };
+
+The nested typedef `type` is a synonym for `ratio<lcm_c<intmax_t, R1::num, R2::num>::value, gcd_c<intmax_t, R1::den, R2::den>::value>::type`.
+
 [endsect]
 
 [section:ratio_comparison `ratio` Comparison]
@@ -827,7 +953,7 @@
 
 [section:ratio_si_typedefs SI typedefs]
 
-The [@http://en.wikipedia.org/wiki/SI_prefix#List_of_SI_prefixes International System of Units] specifies twenty SI prefixes. __Boost_Ratio__ defines all except `yocto`, `zepto`, `zetta`, and `yotta`
+The [@http://en.wikipedia.org/wiki/SI_prefix#List_of_SI_prefixes International System of Units] specifies twenty SI prefixes. __Boost_Ratio defines all except `yocto`, `zepto`, `zetta`, and `yotta`
 
         // convenience SI typedefs
         typedef __ratio<1LL, 1000000000000000000LL> atto;
@@ -854,8 +980,8 @@
 
 The following are limitations of Boost.Ratio relative to the specification in the C++0x draft standard:
  
-* Four of the SI units typedefs -- `yocto`, `zepto`, `zetta`, and `yotta` -- are to be conditionally supported, if the range of `intmax_t` allows, but are not supported by __Boost_Ratio__.
-* Ratio values should be of type static `constexpr intmax_t` (see [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3135.html#1121 Ratio values should be constexpr]), but no compiler supports `constexpr` today, so __Boost_Ratio__ uses `static const intmax_t` instead.
+* Four of the SI units typedefs -- `yocto`, `zepto`, `zetta`, and `yotta` -- are to be conditionally supported, if the range of `intmax_t` allows, but are not supported by __Boost_Ratio.
+* Ratio values should be of type static `constexpr intmax_t` (see [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3135.html#1122 Ratio values should be constexpr]), but for compiler not supporting `constexpr` today, __Boost_Ratio uses `static const intmax_t` instead.
 * Rational arithmetic should use template aliases (see [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3134.html#921 Rational Arithmetic should use template aliases]), but those are not available in C++03, so inheritance is used instead.
  
 The current implementation extends the requirements of the C++0x draft standard by making the copy constructor and copy assignment operator have the same normalized form (see [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3133.html#1281 copy constructor and assignment between ratios having the same normalized form]).
@@ -864,24 +990,213 @@
 
 [endsect]
 
-[/===========================================]
-[section:ratio_io_hpp Header `<boost/ratio_io.hpp>`]
-[/===========================================]
+[/=======================================================]
+[section:ratio_io_hpp Header `<boost/ratio/ratio_io.hpp>`]
+[/=======================================================]
 
 This header provides `ratio_string<>` which can generate a textual representation of a `ratio<>` in the form of a `std::basic_string<>`. These strings can be useful for I/O.
 
     namespace boost {
-
         template <class Ratio, class CharT>
         struct ratio_string
         {
             static std::basic_string<CharT> short_name();
             static std::basic_string<CharT> long_name();
         };
+ }
+
+[endsect]
+
+[/===========================================]
+[section:rational_constant Rational Constant Concept]
+[/===========================================]
 
+[heading Description]
+
+A __Rational_Constant is a holder class for a compile-time value of a rational type. Every __Rational_Constant is also a nullary Metafunction, returning itself. A rational constant object is implicitly convertible to the corresponding run-time value of the rational type.
+
+[heading Expression requirements]
+
+In the following table and subsequent specifications, r is a model of __Rational_Constant.
+
+[table
+ [[Expression][Type] [Complexity]]
+ [[`r::tag`][`rational_c_tag`] [Constant time]]
+ [[`r::value_type`][A rational type] [Constant time]]
+ [[`r::num_type`][An integral type] [Constant time]]
+ [[`r::den_type`][An integral type] [Constant time]]
+ [[`r::num`][An Integral constant expression] [Constant time]]
+ [[`r::den`][An Integral constant expression] [Constant time]]
+ [[`r::type`][__Rational_Constant] [Constant time]]
+ [[`r::value_type const c=r()`][] [Constant time]]
+]
+
+[heading Expression semantics]
+
+[table
+ [[Expression][Semantics]]
+ [[`r::tag`][r's tag type; r::tag::value is r's conversion rank.]]
+ [[`r::value_type`][A cv-unqualified type of `r()`]]
+ [[`r::num_type`][A cv-unqualified type of `r::num`]]
+ [[`r::den_type`][A cv-unqualified type of `r::den`]]
+ [[`r::num`][The numerator of the rational constant]]
+ [[`r::den`][The denominator of the rational constant]]
+ [[`r::type`][equal_to<n::type,n>::value == true.]]
+ [[`r::value_type const c=r()`][`r::value_type const c=r::value_type(r::num,r::den)`]]
+]
+
+[heading Models]
+
+* __ratio<>
+
+[endsect]
+
+[/===========================================]
+[section:rational_constant_hpp Header `<boost/ratio/rational_constant.hpp>`]
+[/===========================================]
+
+This header includes all the rational constant related header files
+
+ #include <boost/ratio/mpl/rational_c_tag.hpp>
+ #include <boost/ratio/mpl/numeric_cast.hpp>
+ #include <boost/ratio/mpl/arithmetic.hpp>
+ #include <boost/ratio/mpl/comparison.hpp>
+
+
+[endsect] [/section:rational_constant_hpp Header `<boost/ratio/rational_constant.hpp>`]
+
+[/===========================================]
+[section:mpl_rational_c_tag_hpp Header `<boost/ratio/mpl/rational_c_tag.hpp>`]
+[/===========================================]
+
+ namespace boost {
+ namespace mpl {
+
+ struct rational_c_tag : int_<10> {};
+
+ }
+ }
+
+[endsect] [/section:mpl_rational_c_tag_hpp Header `<boost/ratio/mpl/rational_c_tag.hpp>`]
+
+[/===========================================]
+[section:mpl_numeric_cast_hpp Header `<boost/ratio/mpl/numeric_cast.hpp>`]
+[/===========================================]
+
+ namespace boost {
+ namespace mpl {
+
+ template<> struct numeric_cast< integral_c_tag,rational_c_tag >;
+
+ }
     }
 
+[section:numeric_cast `mpl::numeric_cast<>` Specialization]
+
+A Integral Constant is seen as a ratio with numerator the Integral Constant value and denominator 1.
+
+ template<> struct numeric_cast< integral_c_tag,rational_c_tag >
+ {
+ template< typename N > struct apply
+ : ratio< N::value, 1 >
+ {
+ };
+ };
+
 [endsect]
+
+[endsect] [/section:mpl_numeric_cast_hpp Header `<boost/ratio/mpl/numeric_cast.hpp>`]
+
+[/===========================================]
+[section:mpl_arithmetic_hpp Header `<boost/ratio/mpl/arithmetic.hpp>`]
+[/===========================================]
+
+This header includes all the rational constant arithmetic MPL specializations.
+
+ #include <boost/ratio/mpl/plus.hpp>
+ #include <boost/ratio/mpl/minus.hpp>
+ #include <boost/ratio/mpl/times.hpp>
+ #include <boost/ratio/mpl/divides.hpp>
+ #include <boost/ratio/mpl/negate.hpp>
+ #include <boost/ratio/mpl/abs.hpp>
+ #include <boost/ratio/mpl/sign.hpp>
+ #include <boost/ratio/mpl/gcd.hpp>
+ #include <boost/ratio/mpl/lcm.hpp>
+
+
+[endsect] [/section:mpl_arithmetic_hpp Header `<boost/ratio/mpl/arithmetic.hpp>`]
+
+[/===========================================]
+[section:mpl_plus_hpp Header `<boost/ratio/mpl/plus.hpp>`]
+[/===========================================]
+
+ namespace boost {
+ namespace mpl {
+
+ template<>
+ struct plus_impl< rational_c_tag,rational_c_tag >;
+ }
+ }
+
+[section:plus_impl `mpl::plus_impl<>` Specialization]
+
+ template<>
+ struct plus_impl< rational_c_tag,rational_c_tag >
+ {
+ template< typename R1, typename R2 > struct apply
+ : ratio_add<R1, R2>
+ {
+ };
+ };
+
+[endsect]
+
+[endsect] [/section:mpl_plus_hpp Header `<boost/ratio/mpl/plus.hpp>`]
+
+[/===========================================]
+[section:mpl_comparison_hpp Header `<boost/ratio/mpl/comparison.hpp>`]
+[/===========================================]
+
+This header includes all the rational constant comparison MPL specializations.
+
+ #include <boost/ratio/mpl/equal_to.hpp>
+ #include <boost/ratio/mpl/not_equal_to.hpp>
+ #include <boost/ratio/mpl/less.hpp>
+ #include <boost/ratio/mpl/less_equal.hpp>
+ #include <boost/ratio/mpl/greater.hpp>
+ #include <boost/ratio/mpl/greater_equal.hpp>
+
+
+[endsect] [/section:mpl_comparison_hpp Header `<boost/ratio/mpl/mpl_comparison_hpp.hpp>`]
+
+[/===========================================]
+[section:mpl_equal_to_hpp Header `<boost/ratio/mpl/equal_to.hpp>`]
+[/===========================================]
+
+ namespace boost {
+ namespace mpl {
+
+ template<>
+ struct equal_to_impl< rational_c_tag,rational_c_tag >;
+ }
+ }
+
+[section:equal_to `mpl::equal_to_impl<>` Specialization]
+
+ template<>
+ struct equal_to_impl< rational_c_tag,rational_c_tag >
+ {
+ template< typename R1, typename R2 > struct apply
+ : ratio_equal<R1, R2>
+ {
+ };
+ };
+
+[endsect]
+
+[endsect] [/section:mpl_equal_to_hpp Header `<boost/ratio/mpl/equal_to.hpp>`]
+
+
 [endsect]
 
 
@@ -892,6 +1207,13 @@
 [section:history Appendix A: History]
 [/==================================]
 
+[section [*Version 1.0.1, Jan 8, 2011] ]
+
+* Added MPL Rational Constant and the associated numeric metafunction specializations.
+
+[endsect]
+
+
 [section [*Version 1.0.0, Jan 2, 2011] ]
 
 * Moved ratio to trunk.
@@ -1160,9 +1482,11 @@
 
 Much thanks to Andrei Alexandrescu, Walter Brown, Peter Dimov, Jeff Garland, Terry Golubiewski, Daniel Krugler, Anthony Williams.
 
-The ratio.hpp source has been adapted from the experimental header `<ratio_io>` from Howard Hinnant.
+Howard Hinnant, who is the real author of the library, has provided valuable feedback and suggestions during the development of the library. In particular, The ratio_io.hpp source has been adapted from the experimental header `<ratio_io>` from Howard Hinnant.
+
+The acceptance review of Boost.Ratio took place between October 2nd and 11th 2010. Many thanks to Anthony Williams, the review manager, and to all the reviewers: Bruno Santos, Joel Falcou, Robert Stewart, Roland Bock, Tom Tan and Paul A. Bristol.
 
-Thanks to Andrew Chinnoff for his help polishing the documentation.
+Thanks to Andrew Chinoff and Paul A. Bristol for his help polishing the documentation.
 
 [endsect] [/section:acknowledgements Appendix E: Acknowledgements]
 
@@ -1242,7 +1566,6 @@
 
 [heading For later releases]
 
-* Use constexpr on compilers providing it.
 * Use template aliases on compiler providing it.
 * Implement [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3135.html#3135 multiple arguments] ratio arithmetic.
 


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk