Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r79952 - in sandbox/big_number: boost/multiprecision boost/multiprecision/depricated boost/multiprecision/detail libs/multiprecision/doc libs/multiprecision/doc/html libs/multiprecision/doc/html/boost_multiprecision libs/multiprecision/doc/html/boost_multiprecision/indexes libs/multiprecision/doc/html/boost_multiprecision/ref libs/multiprecision/test
From: john_at_[hidden]
Date: 2012-08-10 04:37:41


Author: johnmaddock
Date: 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
New Revision: 79952
URL: http://svn.boost.org/trac/boost/changeset/79952

Log:
Much improved concept docs.
Regenerate docs.
Make some cpp_int specific routines generic instead.
Changed divide-by-zero to be an overflow error.
Text files modified:
   sandbox/big_number/boost/multiprecision/cpp_int.hpp | 81 -
   sandbox/big_number/boost/multiprecision/depricated/fixed_int.hpp | 2
   sandbox/big_number/boost/multiprecision/detail/cpp_int_trivial_ops.hpp | 6
   sandbox/big_number/boost/multiprecision/detail/integer_ops.hpp | 82 +
   sandbox/big_number/boost/multiprecision/gmp.hpp | 32
   sandbox/big_number/boost/multiprecision/rational_adapter.hpp | 2
   sandbox/big_number/boost/multiprecision/tommath.hpp | 12
   sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html | 268 ++++
   sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html | 16
   sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html | 18
   sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html | 344 +++++
   sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/intro.html | 9
   sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html | 2270 +++++++++++++++++++++++++++++++--------
   sandbox/big_number/libs/multiprecision/doc/html/index.html | 2
   sandbox/big_number/libs/multiprecision/doc/multiprecision.qbk | 429 +++++--
   sandbox/big_number/libs/multiprecision/test/test_arithmetic.cpp | 6
   16 files changed, 2787 insertions(+), 792 deletions(-)

Modified: sandbox/big_number/boost/multiprecision/cpp_int.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/cpp_int.hpp (original)
+++ sandbox/big_number/boost/multiprecision/cpp_int.hpp 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -2149,7 +2149,7 @@
 
    if(y == 0)
    {
- BOOST_THROW_EXCEPTION(std::runtime_error("Integer Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Integer Division by zero."));
    }
    //
    // Find the most significant word of numerator.
@@ -2765,66 +2765,6 @@
 }
 
 template <unsigned MinBits, bool Signed, class Allocator>
-inline void eval_gcd(cpp_int_backend<MinBits, Signed, Allocator, false>& result, const cpp_int_backend<MinBits, Signed, Allocator, false>& a, const cpp_int_backend<MinBits, Signed, Allocator, false>& b) BOOST_NOEXCEPT_IF(boost::is_void<Allocator>::value)
-{
- int shift;
-
- cpp_int_backend<MinBits, Signed, Allocator, false> u(a), v(b);
-
- int s = eval_get_sign(u);
-
- /* GCD(0,x) := x */
- if(s < 0)
- {
- u.negate();
- }
- else if(s == 0)
- {
- result = v;
- return;
- }
- s = eval_get_sign(v);
- if(s < 0)
- {
- v.negate();
- }
- else if(s == 0)
- {
- result = u;
- return;
- }
-
- /* Let shift := lg K, where K is the greatest power of 2
- dividing both u and v. */
-
- unsigned us = eval_lsb(u);
- unsigned vs = eval_lsb(v);
- shift = (std::min)(us, vs);
- eval_right_shift(u, us);
- eval_right_shift(v, vs);
-
- do
- {
- /* Now u and v are both odd, so diff(u, v) is even.
- Let u = min(u, v), v = diff(u, v)/2. */
- if(u.compare(v) > 0)
- u.swap(v);
- eval_subtract(v, u);
- // Termination condition tries not to do a full compare if possible:
- if(!v.limbs()[0] && eval_is_zero(v))
- break;
- vs = eval_lsb(v);
- eval_right_shift(v, vs);
- BOOST_ASSERT((v.limbs()[0] & 1));
- BOOST_ASSERT((u.limbs()[0] & 1));
- }
- while(true);
-
- result = u;
- eval_left_shift(result, shift);
-}
-
-template <unsigned MinBits, bool Signed, class Allocator>
 inline bool eval_bit_test(const cpp_int_backend<MinBits, Signed, Allocator, false>& val, unsigned index) BOOST_NOEXCEPT
 {
    unsigned offset = index / cpp_int_backend<MinBits, Signed, Allocator, false>::limb_bits;
@@ -2885,25 +2825,6 @@
 }
 
 template <unsigned MinBits, bool Signed, class Allocator>
-inline void eval_lcm(cpp_int_backend<MinBits, Signed, Allocator, false>& result, const cpp_int_backend<MinBits, Signed, Allocator, false>& a, const cpp_int_backend<MinBits, Signed, Allocator, false>& b) BOOST_NOEXCEPT_IF(boost::is_void<Allocator>::value)
-{
- cpp_int_backend<MinBits, Signed, Allocator, false> t;
- eval_gcd(t, a, b);
-
- if(eval_is_zero(t))
- {
- result = static_cast<limb_type>(0);
- }
- else
- {
- eval_divide(result, a, t);
- eval_multiply(result, b);
- }
- if(eval_get_sign(result) < 0)
- result.negate();
-}
-
-template <unsigned MinBits, bool Signed, class Allocator>
 inline void eval_qr(const cpp_int_backend<MinBits, Signed, Allocator, false>& x, const cpp_int_backend<MinBits, Signed, Allocator, false>& y,
    cpp_int_backend<MinBits, Signed, Allocator, false>& q, cpp_int_backend<MinBits, Signed, Allocator, false>& r) BOOST_NOEXCEPT_IF(boost::is_void<Allocator>::value)
 {

Modified: sandbox/big_number/boost/multiprecision/depricated/fixed_int.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/depricated/fixed_int.hpp (original)
+++ sandbox/big_number/boost/multiprecision/depricated/fixed_int.hpp 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -889,7 +889,7 @@
 
    if(y == 0)
    {
- BOOST_THROW_EXCEPTION(std::runtime_error("Integer Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Integer Division by zero."));
    }
    //
    // Find the most significant word of numerator.

Modified: sandbox/big_number/boost/multiprecision/detail/cpp_int_trivial_ops.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/detail/cpp_int_trivial_ops.hpp (original)
+++ sandbox/big_number/boost/multiprecision/detail/cpp_int_trivial_ops.hpp 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -185,7 +185,7 @@
 BOOST_FORCEINLINE void eval_divide(cpp_int_backend<MinBits, true, void, true>& result, const cpp_int_backend<MinBits, true, void, true>& o)
 {
    if(!*o.limbs())
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    *result.limbs() /= *o.limbs();
    result.sign(result.sign() != o.sign());
 }
@@ -194,7 +194,7 @@
 BOOST_FORCEINLINE void eval_divide(cpp_int_backend<MinBits, false, void, true>& result, const cpp_int_backend<MinBits, false, void, true>& o)
 {
    if(!*o.limbs())
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    *result.limbs() /= *o.limbs();
 }
 
@@ -202,7 +202,7 @@
 BOOST_FORCEINLINE void eval_modulus(cpp_int_backend<MinBits, Signed, void, true>& result, const cpp_int_backend<MinBits, Signed, void, true>& o)
 {
    if(!*o.limbs())
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    *result.limbs() %= *o.limbs();
    result.sign(result.sign());
 }

Modified: sandbox/big_number/boost/multiprecision/detail/integer_ops.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/detail/integer_ops.hpp (original)
+++ sandbox/big_number/boost/multiprecision/detail/integer_ops.hpp 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -38,6 +38,88 @@
    return maybe_abs(result);
 }
 
+template <class B>
+inline void eval_gcd(B& result, const B& a, const B& b)
+{
+ using default_ops::eval_lsb;
+ using default_ops::eval_is_zero;
+ using default_ops::eval_get_sign;
+
+ int shift;
+
+ B u(a), v(b);
+
+ int s = eval_get_sign(u);
+
+ /* GCD(0,x) := x */
+ if(s < 0)
+ {
+ u.negate();
+ }
+ else if(s == 0)
+ {
+ result = v;
+ return;
+ }
+ s = eval_get_sign(v);
+ if(s < 0)
+ {
+ v.negate();
+ }
+ else if(s == 0)
+ {
+ result = u;
+ return;
+ }
+
+ /* Let shift := lg K, where K is the greatest power of 2
+ dividing both u and v. */
+
+ unsigned us = eval_lsb(u);
+ unsigned vs = eval_lsb(v);
+ shift = (std::min)(us, vs);
+ eval_right_shift(u, us);
+ eval_right_shift(v, vs);
+
+ do
+ {
+ /* Now u and v are both odd, so diff(u, v) is even.
+ Let u = min(u, v), v = diff(u, v)/2. */
+ if(u.compare(v) > 0)
+ u.swap(v);
+ eval_subtract(v, u);
+ // Termination condition tries not to do a full compare if possible:
+ if(eval_is_zero(v))
+ break;
+ vs = eval_lsb(v);
+ eval_right_shift(v, vs);
+ }
+ while(true);
+
+ result = u;
+ eval_left_shift(result, shift);
+}
+
+template <class B>
+inline void eval_lcm(B& result, const B& a, const B& b)
+{
+ typedef typename typename mpl::front<typename B::unsigned_types>::type ui_type;
+ B t;
+ eval_gcd(t, a, b);
+
+ if(eval_is_zero(t))
+ {
+ result = static_cast<ui_type>(0);
+ }
+ else
+ {
+ eval_divide(result, a, t);
+ eval_multiply(result, b);
+ }
+ if(eval_get_sign(result) < 0)
+ result.negate();
+}
+
 }
 
 template <class Backend, bool ExpressionTemplates>

Modified: sandbox/big_number/boost/multiprecision/gmp.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/gmp.hpp (original)
+++ sandbox/big_number/boost/multiprecision/gmp.hpp 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -570,7 +570,7 @@
 inline void eval_divide(gmp_float<digits10>& result, const gmp_float<digits10>& o)
 {
    if(eval_is_zero(o))
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpf_div(result.data(), result.data(), o.data());
 }
 template <unsigned digits10>
@@ -592,7 +592,7 @@
 inline void eval_divide(gmp_float<digits10>& result, unsigned long i)
 {
    if(i == 0)
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpf_div_ui(result.data(), result.data(), i);
 }
 template <unsigned digits10>
@@ -622,7 +622,7 @@
 inline void eval_divide(gmp_float<digits10>& result, long i)
 {
    if(i == 0)
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpf_div_ui(result.data(), result.data(), std::abs(i));
    if(i < 0)
       mpf_neg(result.data(), result.data());
@@ -741,21 +741,21 @@
 inline void eval_divide(gmp_float<digits10>& a, const gmp_float<digits10>& x, const gmp_float<digits10>& y)
 {
    if(eval_is_zero(y))
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpf_div(a.data(), x.data(), y.data());
 }
 template <unsigned digits10>
 inline void eval_divide(gmp_float<digits10>& a, const gmp_float<digits10>& x, unsigned long y)
 {
    if(y == 0)
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpf_div_ui(a.data(), x.data(), y);
 }
 template <unsigned digits10>
 inline void eval_divide(gmp_float<digits10>& a, const gmp_float<digits10>& x, long y)
 {
    if(y == 0)
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    if(y < 0)
    {
       mpf_div_ui(a.data(), x.data(), -y);
@@ -768,14 +768,14 @@
 inline void eval_divide(gmp_float<digits10>& a, unsigned long x, const gmp_float<digits10>& y)
 {
    if(eval_is_zero(y))
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpf_ui_div(a.data(), x, y.data());
 }
 template <unsigned digits10>
 inline void eval_divide(gmp_float<digits10>& a, long x, const gmp_float<digits10>& y)
 {
    if(eval_is_zero(y))
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    if(x < 0)
    {
       mpf_ui_div(a.data(), -x, y.data());
@@ -1278,7 +1278,7 @@
 inline void eval_divide(gmp_int& t, const gmp_int& o)
 {
    if(eval_is_zero(o))
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpz_tdiv_q(t.data(), t.data(), o.data());
 }
 inline void eval_modulus(gmp_int& t, const gmp_int& o)
@@ -1304,7 +1304,7 @@
 inline void eval_divide(gmp_int& t, unsigned long i)
 {
    if(i == 0)
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpz_tdiv_q_ui(t.data(), t.data(), i);
 }
 inline void eval_add(gmp_int& t, long i)
@@ -1334,7 +1334,7 @@
 inline void eval_divide(gmp_int& t, long i)
 {
    if(i == 0)
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpz_tdiv_q_ui(t.data(), t.data(), std::abs(i));
    if(i < 0)
       mpz_neg(t.data(), t.data());
@@ -1390,7 +1390,7 @@
 inline void eval_divide(gmp_int& t, const gmp_int& p, const gmp_int& o)
 {
    if(eval_is_zero(o))
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpz_tdiv_q(t.data(), p.data(), o.data());
 }
 inline void eval_modulus(gmp_int& t, const gmp_int& p, const gmp_int& o)
@@ -1416,7 +1416,7 @@
 inline void eval_divide(gmp_int& t, const gmp_int& p, unsigned long i)
 {
    if(i == 0)
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpz_tdiv_q_ui(t.data(), p.data(), i);
 }
 inline void eval_add(gmp_int& t, const gmp_int& p, long i)
@@ -1446,7 +1446,7 @@
 inline void eval_divide(gmp_int& t, const gmp_int& p, long i)
 {
    if(i == 0)
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpz_tdiv_q_ui(t.data(), p.data(), std::abs(i));
    if(i < 0)
       mpz_neg(t.data(), t.data());
@@ -1914,7 +1914,7 @@
 inline void eval_divide(gmp_rational& t, const gmp_rational& o)
 {
    if(eval_is_zero(o))
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpq_div(t.data(), t.data(), o.data());
 }
 inline void eval_add(gmp_rational& t, const gmp_rational& p, const gmp_rational& o)
@@ -1932,7 +1932,7 @@
 inline void eval_divide(gmp_rational& t, const gmp_rational& p, const gmp_rational& o)
 {
    if(eval_is_zero(o))
- BOOST_THROW_EXCEPTION(std::runtime_error("Division by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Division by zero."));
    mpq_div(t.data(), p.data(), o.data());
 }
    

Modified: sandbox/big_number/boost/multiprecision/rational_adapter.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/rational_adapter.hpp (original)
+++ sandbox/big_number/boost/multiprecision/rational_adapter.hpp 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -154,7 +154,7 @@
    using default_ops::eval_is_zero;
    if(eval_is_zero(o))
    {
- BOOST_THROW_EXCEPTION(std::runtime_error("Divide by zero."));
+ BOOST_THROW_EXCEPTION(std::overflow_error("Divide by zero."));
    }
    result.data() /= o.data();
 }

Modified: sandbox/big_number/boost/multiprecision/tommath.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/tommath.hpp (original)
+++ sandbox/big_number/boost/multiprecision/tommath.hpp 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -378,11 +378,17 @@
 }
 inline void eval_divide(tommath_int& t, const tommath_int& o)
 {
+ using default_ops::eval_is_zero;
    tommath_int temp;
+ if(eval_is_zero(o))
+ BOOST_THROW_EXCEPTION(std::overflow_error("Integer division by zero"));
    detail::check_tommath_result(mp_div(&t.data(), const_cast< ::mp_int*>(&o.data()), &t.data(), &temp.data()));
 }
 inline void eval_modulus(tommath_int& t, const tommath_int& o)
 {
+ using default_ops::eval_is_zero;
+ if(eval_is_zero(o))
+ BOOST_THROW_EXCEPTION(std::overflow_error("Integer division by zero"));
    bool neg = eval_get_sign(t) < 0;
    bool neg2 = eval_get_sign(o) < 0;
    detail::check_tommath_result(mp_mod(&t.data(), const_cast< ::mp_int*>(&o.data()), &t.data()));
@@ -455,11 +461,17 @@
 }
 inline void eval_divide(tommath_int& t, const tommath_int& p, const tommath_int& o)
 {
+ using default_ops::eval_is_zero;
    tommath_int d;
+ if(eval_is_zero(o))
+ BOOST_THROW_EXCEPTION(std::overflow_error("Integer division by zero"));
    detail::check_tommath_result(mp_div(const_cast< ::mp_int*>(&p.data()), const_cast< ::mp_int*>(&o.data()), &t.data(), &d.data()));
 }
 inline void eval_modulus(tommath_int& t, const tommath_int& p, const tommath_int& o)
 {
+ using default_ops::eval_is_zero;
+ if(eval_is_zero(o))
+ BOOST_THROW_EXCEPTION(std::overflow_error("Integer division by zero"));
    bool neg = eval_get_sign(p) < 0;
    bool neg2 = eval_get_sign(o) < 0;
    detail::check_tommath_result(mp_mod(const_cast< ::mp_int*>(&p.data()), const_cast< ::mp_int*>(&o.data()), &t.data()));

Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -13,13 +13,20 @@
 <div class="spirit-nav">
 <a accesskey="p" href="../indexes.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="s02.html"><img src="../../images/next.png" alt="Next"></a>
 </div>
-<div class="section id928096">
+<div class="section id957445">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id928096"></a>Function Index</h3></div></div></div>
-<p><a class="link" href="s01.html#idx_id_0">B</a> <a class="link" href="s01.html#idx_id_1">C</a> <a class="link" href="s01.html#idx_id_2">D</a> <a class="link" href="s01.html#idx_id_3">E</a> <a class="link" href="s01.html#idx_id_4">F</a> <a class="link" href="s01.html#idx_id_6">I</a> <a class="link" href="s01.html#idx_id_7">L</a> <a class="link" href="s01.html#idx_id_8">M</a> <a class="link" href="s01.html#idx_id_11">P</a> <a class="link" href="s01.html#idx_id_12">R</a> <a class="link" href="s01.html#idx_id_13">S</a> <a class="link" href="s01.html#idx_id_14">T</a> <a class="link" href="s01.html#idx_id_16">Z</a></p>
+<a name="id957445"></a>Function Index</h3></div></div></div>
+<p><a class="link" href="s01.html#idx_id_0">A</a> <a class="link" href="s01.html#idx_id_1">B</a> <a class="link" href="s01.html#idx_id_2">C</a> <a class="link" href="s01.html#idx_id_3">D</a> <a class="link" href="s01.html#idx_id_4">E</a> <a class="link" href="s01.html#idx_id_5">F</a> <a class="link" href="s01.html#idx_id_7">I</a> <a class="link" href="s01.html#idx_id_8">L</a> <a class="link" href="s01.html#idx_id_9">M</a> <a class="link" href="s01.html#idx_id_12">P</a> <a class="link" href="s01.html#idx_id_13">R</a> <a class="link" href="s01.html#idx_id_14">S</a> <a class="link" href="s01.html#idx_id_15">T</a> <a class="link" href="s01.html#idx_id_17">Z</a></p>
 <div class="variablelist"><dl>
 <dt>
-<a name="idx_id_0"></a><span class="term">B</span>
+<a name="idx_id_0"></a><span class="term">A</span>
+</dt>
+<dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">assign_components</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_1"></a><span class="term">B</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -40,14 +47,14 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_1"></a><span class="term">C</span>
+<a name="idx_id_2"></a><span class="term">C</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">compare</span></p>
 <div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
 </li></ul></div></dd>
 <dt>
-<a name="idx_id_2"></a><span class="term">D</span>
+<a name="idx_id_3"></a><span class="term">D</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -69,21 +76,246 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_3"></a><span class="term">E</span>
+<a name="idx_id_4"></a><span class="term">E</span>
 </dt>
-<dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
+<dd><div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_acos</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_add</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_asin</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_atan</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_atan2</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_and</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_or</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_xor</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_flip</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_set</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_test</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_unset</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_ceil</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_complement</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_convert_to</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_cos</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_cosh</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_decrement</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_divide</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_eq</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_exp</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_fabs</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_floor</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_fmod</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_frexp</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_gcd</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">eval_get_sign</span></p>
 <div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
-</li></ul></div></dd>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_gt</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_increment</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_is_zero</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_lcm</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_ldexp</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_left_shift</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_log</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_log10</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_lt</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_modulus</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_multiply</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_pow</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_powm</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_qr</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_right_shift</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_round</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sin</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sinh</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sqrt</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_subtract</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_tan</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_tanh</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_trunc</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
 <dt>
-<a name="idx_id_4"></a><span class="term">F</span>
+<a name="idx_id_5"></a><span class="term">F</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">fpclassify</span></p>
 <div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
 </li></ul></div></dd>
 <dt>
-<a name="idx_id_6"></a><span class="term">I</span>
+<a name="idx_id_7"></a><span class="term">I</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -120,7 +352,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_7"></a><span class="term">L</span>
+<a name="idx_id_8"></a><span class="term">L</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -145,7 +377,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_8"></a><span class="term">M</span>
+<a name="idx_id_9"></a><span class="term">M</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">miller_rabin_test</span></p>
@@ -155,7 +387,7 @@
 </ul></div>
 </li></ul></div></dd>
 <dt>
-<a name="idx_id_11"></a><span class="term">P</span>
+<a name="idx_id_12"></a><span class="term">P</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -171,7 +403,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_12"></a><span class="term">R</span>
+<a name="idx_id_13"></a><span class="term">R</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -184,7 +416,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_13"></a><span class="term">S</span>
+<a name="idx_id_14"></a><span class="term">S</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -197,14 +429,14 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_14"></a><span class="term">T</span>
+<a name="idx_id_15"></a><span class="term">T</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">trunc</span></p>
 <div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
 </li></ul></div></dd>
 <dt>
-<a name="idx_id_16"></a><span class="term">Z</span>
+<a name="idx_id_17"></a><span class="term">Z</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">zero</span></p>

Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -13,13 +13,13 @@
 <div class="spirit-nav">
 <a accesskey="p" href="s01.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="s03.html"><img src="../../images/next.png" alt="Next"></a>
 </div>
-<div class="section id928995">
+<div class="section id960166">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id928995"></a>Class Index</h3></div></div></div>
-<p><a class="link" href="s02.html#idx_id_18">C</a> <a class="link" href="s02.html#idx_id_22">G</a> <a class="link" href="s02.html#idx_id_25">M</a> <a class="link" href="s02.html#idx_id_26">N</a> <a class="link" href="s02.html#idx_id_31">T</a></p>
+<a name="id960166"></a>Class Index</h3></div></div></div>
+<p><a class="link" href="s02.html#idx_id_20">C</a> <a class="link" href="s02.html#idx_id_24">G</a> <a class="link" href="s02.html#idx_id_27">M</a> <a class="link" href="s02.html#idx_id_28">N</a> <a class="link" href="s02.html#idx_id_33">T</a></p>
 <div class="variablelist"><dl>
 <dt>
-<a name="idx_id_18"></a><span class="term">C</span>
+<a name="idx_id_20"></a><span class="term">C</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -33,7 +33,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_22"></a><span class="term">G</span>
+<a name="idx_id_24"></a><span class="term">G</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-0">gmp_float</span></a></p></li>
@@ -41,7 +41,7 @@
 <li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-0">gmp_rational</span></a></p></li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_25"></a><span class="term">M</span>
+<a name="idx_id_27"></a><span class="term">M</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">mpfr_float_backend</span></p>
@@ -51,7 +51,7 @@
 </ul></div>
 </li></ul></div></dd>
 <dt>
-<a name="idx_id_26"></a><span class="term">N</span>
+<a name="idx_id_28"></a><span class="term">N</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-0">number</span></a></p></li>
@@ -61,7 +61,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_31"></a><span class="term">T</span>
+<a name="idx_id_33"></a><span class="term">T</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">tommath_int</span></p>

Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -13,13 +13,13 @@
 <div class="spirit-nav">
 <a accesskey="p" href="s02.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="s04.html"><img src="../../images/next.png" alt="Next"></a>
 </div>
-<div class="section id929394">
+<div class="section id960399">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id929394"></a>Typedef Index</h3></div></div></div>
-<p><a class="link" href="s03.html#idx_id_35">C</a> <a class="link" href="s03.html#idx_id_40">I</a> <a class="link" href="s03.html#idx_id_41">L</a> <a class="link" href="s03.html#idx_id_42">M</a> <a class="link" href="s03.html#idx_id_48">T</a> <a class="link" href="s03.html#idx_id_49">U</a></p>
+<a name="id960399"></a>Typedef Index</h3></div></div></div>
+<p><a class="link" href="s03.html#idx_id_38">C</a> <a class="link" href="s03.html#idx_id_43">I</a> <a class="link" href="s03.html#idx_id_44">L</a> <a class="link" href="s03.html#idx_id_45">M</a> <a class="link" href="s03.html#idx_id_51">T</a> <a class="link" href="s03.html#idx_id_52">U</a></p>
 <div class="variablelist"><dl>
 <dt>
-<a name="idx_id_35"></a><span class="term">C</span>
+<a name="idx_id_38"></a><span class="term">C</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -47,7 +47,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_40"></a><span class="term">I</span>
+<a name="idx_id_43"></a><span class="term">I</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -72,14 +72,14 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_41"></a><span class="term">L</span>
+<a name="idx_id_44"></a><span class="term">L</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">limb_type</span></p>
 <div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
 </li></ul></div></dd>
 <dt>
-<a name="idx_id_42"></a><span class="term">M</span>
+<a name="idx_id_45"></a><span class="term">M</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -154,7 +154,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_48"></a><span class="term">T</span>
+<a name="idx_id_51"></a><span class="term">T</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-0">tommath_rational</span></a></p></li>
@@ -165,7 +165,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_49"></a><span class="term">U</span>
+<a name="idx_id_52"></a><span class="term">U</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">

Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -12,13 +12,20 @@
 <div class="spirit-nav">
 <a accesskey="p" href="s03.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a>
 </div>
-<div class="section id930129">
+<div class="section id961133">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id930129"></a>Index</h3></div></div></div>
-<p><a class="link" href="s04.html#idx_id_51">B</a> <a class="link" href="s04.html#idx_id_52">C</a> <a class="link" href="s04.html#idx_id_53">D</a> <a class="link" href="s04.html#idx_id_54">E</a> <a class="link" href="s04.html#idx_id_55">F</a> <a class="link" href="s04.html#idx_id_56">G</a> <a class="link" href="s04.html#idx_id_57">I</a> <a class="link" href="s04.html#idx_id_58">L</a> <a class="link" href="s04.html#idx_id_59">M</a> <a class="link" href="s04.html#idx_id_60">N</a> <a class="link" href="s04.html#idx_id_61">O</a> <a class="link" href="s04.html#idx_id_62">P</a> <a class="link" href="s04.html#idx_id_63">R</a> <a class="link" href="s04.html#idx_id_64">S</a> <a class="link" href="s04.html#idx_id_65">T</a> <a class="link" href="s04.html#idx_id_66">U</a> <a class="link" href="s04.html#idx_id_67">Z</a></p>
+<a name="id961133"></a>Index</h3></div></div></div>
+<p><a class="link" href="s04.html#idx_id_54">A</a> <a class="link" href="s04.html#idx_id_55">B</a> <a class="link" href="s04.html#idx_id_56">C</a> <a class="link" href="s04.html#idx_id_57">D</a> <a class="link" href="s04.html#idx_id_58">E</a> <a class="link" href="s04.html#idx_id_59">F</a> <a class="link" href="s04.html#idx_id_60">G</a> <a class="link" href="s04.html#idx_id_61">I</a> <a class="link" href="s04.html#idx_id_62">L</a> <a class="link" href="s04.html#idx_id_63">M</a> <a class="link" href="s04.html#idx_id_64">N</a> <a class="link" href="s04.html#idx_id_65">O</a> <a class="link" href="s04.html#idx_id_66">P</a> <a class="link" href="s04.html#idx_id_67">R</a> <a class="link" href="s04.html#idx_id_68">S</a> <a class="link" href="s04.html#idx_id_69">T</a> <a class="link" href="s04.html#idx_id_70">U</a> <a class="link" href="s04.html#idx_id_71">Z</a></p>
 <div class="variablelist"><dl>
 <dt>
-<a name="idx_id_51"></a><span class="term">B</span>
+<a name="idx_id_54"></a><span class="term">A</span>
+</dt>
+<dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">assign_components</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_55"></a><span class="term">B</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -43,7 +50,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_52"></a><span class="term">C</span>
+<a name="idx_id_56"></a><span class="term">C</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -59,6 +66,27 @@
 <div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
 </li>
 <li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Compulsory Requirements on the Backend type.</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_add</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_bitwise_or</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_bitwise_xor</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_ceil</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_complement</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_convert_to</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_divide</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_floor</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_frexp</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_ldexp</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_left_shift</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_modulus</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_multiply</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_right_shift</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_sqrt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_subtract</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">cpp_dec_float</span></p>
 <div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></strong></span></p></li>
@@ -113,7 +141,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_53"></a><span class="term">D</span>
+<a name="idx_id_57"></a><span class="term">D</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -135,21 +163,246 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_54"></a><span class="term">E</span>
+<a name="idx_id_58"></a><span class="term">E</span>
 </dt>
-<dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
+<dd><div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_acos</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_add</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_asin</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_atan</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_atan2</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_and</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_or</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_xor</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_flip</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_set</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_test</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_unset</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_ceil</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_complement</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_convert_to</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_cos</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_cosh</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_decrement</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_divide</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_eq</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_exp</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_fabs</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_floor</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_fmod</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_frexp</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_gcd</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">eval_get_sign</span></p>
 <div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
-</li></ul></div></dd>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_gt</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_increment</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_is_zero</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_lcm</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_ldexp</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_left_shift</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_log</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_log10</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_lt</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_modulus</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_multiply</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_pow</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_powm</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_qr</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_right_shift</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_round</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sin</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sinh</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sqrt</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_subtract</span></p>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_backend_type_" title="Table&#160;1.4.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_tan</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_tanh</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_trunc</span></p>
+<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
 <dt>
-<a name="idx_id_55"></a><span class="term">F</span>
+<a name="idx_id_59"></a><span class="term">F</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">fpclassify</span></p>
 <div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
 </li></ul></div></dd>
 <dt>
-<a name="idx_id_56"></a><span class="term">G</span>
+<a name="idx_id_60"></a><span class="term">G</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -185,7 +438,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_57"></a><span class="term">I</span>
+<a name="idx_id_61"></a><span class="term">I</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -246,7 +499,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_58"></a><span class="term">L</span>
+<a name="idx_id_62"></a><span class="term">L</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -275,7 +528,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_59"></a><span class="term">M</span>
+<a name="idx_id_63"></a><span class="term">M</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -373,7 +626,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_60"></a><span class="term">N</span>
+<a name="idx_id_64"></a><span class="term">N</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -417,14 +670,59 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_61"></a><span class="term">O</span>
+<a name="idx_id_65"></a><span class="term">O</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">Optional Requirements on the Backend Type</span></p>
-<div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_get_sign</span></a></p></li></ul></div>
+<div class="index"><ul class="index" type="none" compact>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">assign_components</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_acos</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_add</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_asin</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_atan</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_atan2</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_and</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_or</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_xor</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_flip</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_set</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_test</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_unset</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_cos</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_cosh</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_decrement</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_divide</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_eq</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_exp</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_fabs</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_fmod</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_gcd</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_get_sign</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_gt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_increment</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_is_zero</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_lcm</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_left_shift</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_log</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_log10</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_lt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_modulus</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_multiply</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_pow</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_powm</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_qr</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_right_shift</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_round</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_sin</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_sinh</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_subtract</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_tan</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_tanh</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_backend_type" title="Table&#160;1.5.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_trunc</span></a></p></li>
+</ul></div>
 </li></ul></div></dd>
 <dt>
-<a name="idx_id_62"></a><span class="term">P</span>
+<a name="idx_id_66"></a><span class="term">P</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -452,7 +750,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_63"></a><span class="term">R</span>
+<a name="idx_id_67"></a><span class="term">R</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -465,7 +763,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_64"></a><span class="term">S</span>
+<a name="idx_id_68"></a><span class="term">S</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -478,7 +776,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_65"></a><span class="term">T</span>
+<a name="idx_id_69"></a><span class="term">T</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -511,7 +809,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_66"></a><span class="term">U</span>
+<a name="idx_id_70"></a><span class="term">U</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact>
 <li class="listitem" style="list-style-type: none">
@@ -532,7 +830,7 @@
 </li>
 </ul></div></dd>
 <dt>
-<a name="idx_id_67"></a><span class="term">Z</span>
+<a name="idx_id_71"></a><span class="term">Z</span>
 </dt>
 <dd><div class="index"><ul class="index" type="none" compact><li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">zero</span></p>

Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/intro.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/intro.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/intro.html 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -136,6 +136,15 @@
       Which don't noticably benefit from move support. Therefore, optimal performance
       comes from having both move-support, and expression templates enabled.
     </p>
+<p>
+ Note that while "moved-from" objects are left in a sane state, they
+ have an unspecified value, and the only permitted operations on them are destruction
+ or the assignment of a new value. Any other operation should be considered
+ a programming error and many backends will trigger an assertion if any other
+ operation is attempted. This behavior allows for optimal performance on move-construction
+ (i.e. no allocation required, we just take ownership of the existing object's
+ internal state), while maintaining usability in the standard library containers.
+ </p>
 <h5>
 <a name="boost_multiprecision.intro.h1"></a>
       <span><a name="boost_multiprecision.intro.expression_templates"></a></span><a class="link" href="intro.html#boost_multiprecision.intro.expression_templates">Expression

Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -20,12 +20,17 @@
 <p>
         The requirements on the <code class="computeroutput"><span class="identifier">Backend</span></code>
         template argument to <code class="computeroutput"><span class="identifier">number</span></code>
- are split up into compulsory requirements, and optional requirements that
- are either to improve performance or provide optional features.
+ are split up into sections: compulsary and optional.
       </p>
 <p>
- TODO: Add optional construction support, add throws specification, clarify
- what compulsory means.
+ Compulsary requirements have no default implementation in the library, therefore
+ if the feature they implement is to be supported at all, then they must be
+ implemented by the backend.
+ </p>
+<p>
+ Optional requirements have default implementations that are called if the
+ backend doesn't provide it's own. Typically the backend will implement these
+ to improve performance.
       </p>
 <p>
         In the following tables, type B is the <code class="computeroutput"><span class="identifier">Backend</span></code>
@@ -33,9 +38,12 @@
         <code class="computeroutput"><span class="identifier">b</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code>
         are a variables of type B, <code class="computeroutput"><span class="identifier">cb</span></code>
         and <code class="computeroutput"><span class="identifier">cb2</span></code> are constant variables
- of type B, <code class="computeroutput"><span class="identifier">a</span></code> is a variable
- of Arithmetic type, <code class="computeroutput"><span class="identifier">s</span></code> is
- a variable of type <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>, <code class="computeroutput"><span class="identifier">ui</span></code>
+ of type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">B</span></code>,
+ <code class="computeroutput"><span class="identifier">rb</span></code> is a variable of type
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">&amp;&amp;</span></code>,
+ <code class="computeroutput"><span class="identifier">a</span></code> is a variable of Arithmetic
+ type, <code class="computeroutput"><span class="identifier">s</span></code> is a variable of
+ type <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>, <code class="computeroutput"><span class="identifier">ui</span></code>
         is a variable of type <code class="computeroutput"><span class="keyword">unsigned</span></code>,
         <code class="computeroutput"><span class="identifier">bb</span></code> is a variable of type
         <code class="computeroutput"><span class="keyword">bool</span></code>, <code class="computeroutput"><span class="identifier">pa</span></code>
@@ -55,6 +63,7 @@
 <col>
 <col>
 <col>
+<col>
 </colgroup>
 <thead><tr>
 <th>
@@ -72,6 +81,11 @@
                   Comments
                 </p>
               </th>
+<th>
+ <p>
+ Throws
+ </p>
+ </th>
 </tr></thead>
 <tbody>
 <tr>
@@ -92,6 +106,11 @@
                   shall terminate in the type that is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">intmax_t</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -111,6 +130,11 @@
                   and shall terminate in the type that is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uintmax_t</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -130,6 +154,11 @@
                   terminate in type <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -144,7 +173,13 @@
               </td>
 <td>
                 <p>
- The type of the exponent of type B.
+ The type of the exponent of type B. This type is required only
+ for floating point types.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -161,6 +196,11 @@
                   Default constructor.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -175,6 +215,11 @@
                   Copy Constructor.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -193,6 +238,11 @@
                   Assignment operator.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -213,6 +263,11 @@
                   <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -231,6 +286,12 @@
                   Assignment from a string.
                 </p>
               </td>
+<td>
+ <p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> if the string could
+ not be interpretted as a valid number.
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -248,6 +309,11 @@
                   Swaps the contents of its arguments.
                 </p>
               </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">noexcept</span></code>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -270,6 +336,11 @@
                   digits as are required to reconstruct the original value.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -287,6 +358,11 @@
                   Negates <code class="computeroutput"><span class="identifier">b</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -310,6 +386,11 @@
                   and zero if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">==</span> <span class="identifier">cb2</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">noexcept</span></code>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -336,6 +417,11 @@
                   <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -354,6 +440,11 @@
                   Adds <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -373,6 +464,11 @@
                   <code class="computeroutput"><span class="identifier">b</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -392,6 +488,11 @@
                   <code class="computeroutput"><span class="identifier">cb</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -410,6 +511,13 @@
                   Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
+ value zero, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">has_infinity</span> <span class="special">==</span>
+ <span class="keyword">false</span></code>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -431,6 +539,12 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
+ value zero.
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -451,6 +565,11 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -471,6 +590,11 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -491,6 +615,11 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -511,6 +640,11 @@
                   is an integer type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -531,6 +665,11 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -551,6 +690,11 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -575,6 +719,11 @@
                   Conversions to other types are entirely optional.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -598,6 +747,11 @@
                   is a floating-point type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -619,6 +773,11 @@
                   is a floating-point type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -642,6 +801,12 @@
                   is a floating-point type.
                 </p>
               </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> if the exponent
+ of cb is too large to be stored in an <code class="computeroutput"><span class="keyword">int</span></code>.
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -663,6 +828,11 @@
                   is a floating-point type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -684,6 +854,11 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -705,6 +880,11 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -726,6 +906,11 @@
                   type.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
@@ -748,6 +933,11 @@
                   Defaults to <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>.
                 </p>
               </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
 </tr>
 </tbody>
 </table></div>
@@ -759,6 +949,7 @@
 <col>
 <col>
 <col>
+<col>
 </colgroup>
 <thead><tr>
 <th>
@@ -776,128 +967,151 @@
                   Comments
                 </p>
               </th>
+<th>
+ <p>
+ Throws
+ </p>
+ </th>
 </tr></thead>
 <tbody>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">b2</span><span class="special">)</span></code>
+ <span class="emphasis"><em>Construct and assign:</em></span>
                 </p>
               </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">B</span></code>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">rb</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Copy constructor from a different back-end type.
+ <code class="computeroutput"><span class="identifier">B</span></code>
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
- <span class="identifier">b2</span></code>
+ Move constructor. Afterwards variable <code class="computeroutput"><span class="identifier">rb</span></code>
+ shall be in sane state, albeit with unspecified value. Only destruction
+ and assignment to the moved-from variable <code class="computeroutput"><span class="identifier">rb</span></code>
+ need be supported after the operation.
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">b</span><span class="special">&amp;</span></code>
+ <code class="computeroutput"><span class="identifier">noexcept</span></code>
                 </p>
               </td>
+</tr>
+<tr>
 <td>
                 <p>
- Assignment operator from a different back-end type.
+ <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
+ <span class="identifier">rb</span></code>
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">&amp;</span></code>
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ Move-assign. Afterwards variable <code class="computeroutput"><span class="identifier">rb</span></code>
+ shall be in sane state, albeit with unspecified value. Only destruction
+ and assignment to the moved-from variable <code class="computeroutput"><span class="identifier">rb</span></code>
+ need be supported after the operation.
                 </p>
               </td>
 <td>
                 <p>
- Assigns to <code class="computeroutput"><span class="identifier">b</span></code> the
- two components in the following arguments. Only applies to rational
- and complex number types.
+ <code class="computeroutput"><span class="identifier">noexcept</span></code>
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ <code class="computeroutput"><span class="identifier">B</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Assigns to <code class="computeroutput"><span class="identifier">b</span></code> the
- two components in the following arguments. Only applies to rational
- and complex number types.
+ Direct construction from an arithmetic type. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ this operation is simulated using default-construction followed
+ by assignment.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">b2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ <code class="computeroutput"><span class="identifier">B</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Adds <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
- type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
- or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Copy constructor from a different back-end type. When not provided,
+ a generic interconversion routine is used.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
+ <span class="identifier">b2</span></code>
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ <code class="computeroutput"><span class="identifier">b</span><span class="special">&amp;</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from
- <code class="computeroutput"><span class="identifier">b</span></code>. The type of
- <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
- in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Assignment operator from a different back-end type. When not provided,
+ a generic interconversion routine is used.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -907,19 +1121,22 @@
               </td>
 <td>
                 <p>
- Multiplies <code class="computeroutput"><span class="identifier">b</span></code> by
- <code class="computeroutput"><span class="identifier">a</span></code>. The type of
- <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
- in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Assigns to <code class="computeroutput"><span class="identifier">b</span></code> the
+ two components in the following arguments. Only applies to rational
+ and complex number types. When not provided, arithmetic operations
+ are used to synthesise the result from the two values.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -929,83 +1146,1006 @@
               </td>
 <td>
                 <p>
- Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">a</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
- type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
- or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Assigns to <code class="computeroutput"><span class="identifier">b</span></code> the
+ two components in the following arguments. Only applies to rational
+ and complex number types. When not provided, arithmetic operations
+ are used to synthesise the result from the two values.
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ &#160;
                 </p>
               </td>
+</tr>
+<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ <span class="emphasis"><em>Comparisons:</em></span>
                 </p>
               </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">%=</span>
- <span class="identifier">cb</span></code>, only required when
- <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
- shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">cb2</span></code>
+ are equal in value. When not provided, the default implementation
+ returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span>
+ <span class="special">==</span> <span class="number">0</span></code>.
                 </p>
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&amp;=</span>
- <span class="identifier">cb</span></code>, only required when
- <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
- shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ <code class="computeroutput"><span class="identifier">noexcept</span></code>
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">|=</span>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>
+ are equal in value. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ return the equivalent of <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>
+ are equal in value. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version returns <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is less than <code class="computeroutput"><span class="identifier">cb2</span></code> in value. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> <span class="special">&lt;</span>
+ <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is less than <code class="computeroutput"><span class="identifier">a</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> is less than <code class="computeroutput"><span class="identifier">cb</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is greater than <code class="computeroutput"><span class="identifier">cb2</span></code> in value. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> <span class="special">&gt;</span>
+ <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is greater than <code class="computeroutput"><span class="identifier">a</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> is greater than <code class="computeroutput"><span class="identifier">cb</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_is_zero</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is zero, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. The default version of this
+ function returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">ui_type</span><span class="special">(</span><span class="number">0</span><span class="special">))</span> <span class="special">==</span>
+ <span class="number">0</span></code>, where <code class="computeroutput"><span class="identifier">ui_type</span></code>
+ is <code class="computeroutput"><span class="identifier">ui_type</span></code> is
+ <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns a value &lt; zero if <code class="computeroutput"><span class="identifier">cb</span></code>
+ is negative, a value &gt; zero if <code class="computeroutput"><span class="identifier">cb</span></code>
+ is positive, and zero if <code class="computeroutput"><span class="identifier">cb</span></code>
+ is zero. The default version of this function returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">ui_type</span><span class="special">(</span><span class="number">0</span><span class="special">))</span></code>,
+ where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
+ <code class="computeroutput"><span class="identifier">ui_type</span></code> is <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Basic arithmetic:</em></span>
+ </p>
+ </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Adds <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">cb2</span></code> and stores the result in
+ <code class="computeroutput"><span class="identifier">b</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">a</span></code> and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Add <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in
+ <code class="computeroutput"><span class="identifier">b</span></code>. The type of
+ <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
+ in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from
+ <code class="computeroutput"><span class="identifier">b</span></code>. The type of
+ <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
+ in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">cb2</span></code> from
+ <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. When
+ not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from
+ <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">cb</span></code> from
+ <code class="computeroutput"><span class="identifier">a</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">();</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">b</span></code> by
+ <code class="computeroutput"><span class="identifier">a</span></code>. The type of
+ <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
+ in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and stores
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">a</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
+ <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">a</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">has_infinity</span>
+ <span class="special">==</span> <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and stores
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">cb2</span></code> has the value zero, and
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">has_infinity</span>
+ <span class="special">==</span> <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">a</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">has_infinity</span>
+ <span class="special">==</span> <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">a</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in
+ <code class="computeroutput"><span class="identifier">b</span></code>. The type of
+ <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
+ in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">cb</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
+ value zero, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">has_infinity</span> <span class="special">==</span>
+ <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_increment</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Increments the value of <code class="computeroutput"><span class="identifier">b</span></code>
+ by one. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">ui_type</span><span class="special">&gt;(</span><span class="number">1u</span><span class="special">))</span></code>.
+ Where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
+ <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_decrement</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Decrements the value of <code class="computeroutput"><span class="identifier">b</span></code>
+ by one. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">ui_type</span><span class="special">&gt;(</span><span class="number">1u</span><span class="special">))</span></code>.
+ Where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
+ <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Integer specific operations:</em></span>
+ </p>
+ </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">%=</span>
                   <span class="identifier">cb</span></code>, only required when
                   <code class="computeroutput"><span class="identifier">B</span></code> is an integer
                   type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
                   shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
+ <span class="identifier">cb2</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">cb</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&amp;=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1015,21 +2155,24 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">^=</span>
- <span class="identifier">cb</span></code>, only required when
- <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
- shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
+ <span class="identifier">cb2</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">cb2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1039,17 +2182,26 @@
               </td>
 <td>
                 <p>
- Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">cb2</span></code> and stores the result in
- <code class="computeroutput"><span class="identifier">b</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">cb2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1059,18 +2211,26 @@
               </td>
 <td>
                 <p>
- Subtracts <code class="computeroutput"><span class="identifier">cb2</span></code> from
- <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
- result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">cb2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1080,18 +2240,25 @@
               </td>
 <td>
                 <p>
- Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
- <code class="computeroutput"><span class="identifier">cb2</span></code> and stores
- the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">|=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">cb2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1101,18 +2268,24 @@
               </td>
 <td>
                 <p>
- Divides <code class="computeroutput"><span class="identifier">cb</span></code> by
- <code class="computeroutput"><span class="identifier">cb2</span></code> and stores
- the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
+ <span class="identifier">cb2</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1122,18 +2295,26 @@
               </td>
 <td>
                 <p>
- Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">a</span></code> and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
- type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
- or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1143,21 +2324,26 @@
               </td>
 <td>
                 <p>
- Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from
- <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
- result in <code class="computeroutput"><span class="identifier">b</span></code>. The
- type of <code class="computeroutput"><span class="identifier">a</span></code> shall
- be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1167,21 +2353,25 @@
               </td>
 <td>
                 <p>
- Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
- <code class="computeroutput"><span class="identifier">a</span></code> and stores the
- result in <code class="computeroutput"><span class="identifier">b</span></code>. The
- type of <code class="computeroutput"><span class="identifier">a</span></code> shall
- be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">^=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1191,21 +2381,24 @@
               </td>
 <td>
                 <p>
- Divides <code class="computeroutput"><span class="identifier">cb</span></code> by
- <code class="computeroutput"><span class="identifier">a</span></code> and stores the
- result in <code class="computeroutput"><span class="identifier">b</span></code>. The
- type of <code class="computeroutput"><span class="identifier">a</span></code> shall
- be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span>
+ <span class="identifier">cb2</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">cb2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1215,18 +2408,26 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
- <span class="identifier">cb2</span></code> and stores the result
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span>
+ <span class="identifier">a</span></code> and stores the result
                   in <code class="computeroutput"><span class="identifier">b</span></code>, only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1236,18 +2437,26 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
- <span class="identifier">cb2</span></code> and stores the result
+ Computes <code class="computeroutput"><span class="identifier">a</span> <span class="special">^</span>
+ <span class="identifier">cb</span></code> and stores the result
                   in <code class="computeroutput"><span class="identifier">b</span></code>, only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1257,18 +2466,24 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
- <span class="identifier">cb2</span></code> and stores the result
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&lt;&lt;</span>
+ <span class="identifier">ui</span></code> and stores the result
                   in <code class="computeroutput"><span class="identifier">b</span></code>, only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1278,20 +2493,27 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span>
- <span class="identifier">cb2</span></code> and stores the result
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&gt;&gt;</span>
+ <span class="identifier">ui</span></code> and stores the result
                   in <code class="computeroutput"><span class="identifier">b</span></code>, only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_qr</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">,</span>
+ <span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">b2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1301,68 +2523,104 @@
               </td>
 <td>
                 <p>
- Add <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in
- <code class="computeroutput"><span class="identifier">b</span></code>. The type of
- <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
- in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">/</span>
+ <span class="identifier">cb2</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code> to the result of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
+ <span class="identifier">cb2</span></code>. Only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_integer_modulus</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">unsigned</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the result of <code class="computeroutput"><span class="identifier">cb</span>
+ <span class="special">%</span> <span class="identifier">ui</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an integer type. The default version of this function is synthesised
+ from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lsb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">unsigned</span></code>
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ Returns the index of the least significant bit that is set. Only
+ required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an integer type. The default version of this function is synthesised
+ from other operations above.
                 </p>
               </td>
 <td>
                 <p>
- Subtracts <code class="computeroutput"><span class="identifier">cb</span></code> from
- <code class="computeroutput"><span class="identifier">a</span></code> and stores the
- result in <code class="computeroutput"><span class="identifier">b</span></code>. The
- type of <code class="computeroutput"><span class="identifier">a</span></code> shall
- be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bit_test</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">ui</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
- <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
- result in <code class="computeroutput"><span class="identifier">b</span></code>. The
- type of <code class="computeroutput"><span class="identifier">a</span></code> shall
- be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Returns true if <code class="computeroutput"><span class="identifier">cb</span></code>
+ has bit <code class="computeroutput"><span class="identifier">ui</span></code> set.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an integer type. The default version of this function is synthesised
+ from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bit_set</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">ui</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1372,20 +2630,23 @@
               </td>
 <td>
                 <p>
- Divides <code class="computeroutput"><span class="identifier">a</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in
- <code class="computeroutput"><span class="identifier">b</span></code>. The type of
- <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
- in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ Sets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bit_unset</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1395,20 +2656,24 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
- <span class="identifier">a</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ Unsets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
- shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_bit_flip</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">ui</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1418,20 +2683,25 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
- <span class="identifier">a</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ Flips the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
- shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1441,20 +2711,26 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
- <span class="identifier">a</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
+ common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
- shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1464,22 +2740,26 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span>
- <span class="identifier">a</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
+ common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
- shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">a</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1489,20 +2769,28 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
- <span class="identifier">a</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
+ common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
                   type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
                   shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
+ of this function calls <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1512,20 +2800,28 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
- <span class="identifier">a</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
+ common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
                   type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
                   shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
+ of this function calls <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1535,20 +2831,28 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
- <span class="identifier">a</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
+ common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">a</span></code>. Only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
                   type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
                   shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
+ of this function calls <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
@@ -1558,130 +2862,145 @@
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">a</span> <span class="special">^</span>
- <span class="identifier">cb</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
+ common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">a</span></code>. Only required
                   when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
                   type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
                   shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
- <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
+ of this function calls <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ &#160;
                 </p>
               </td>
+</tr>
+<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">,</span>
+ <span class="identifier">cb3</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&lt;&lt;</span>
- <span class="identifier">ui</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
- when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
+ <code class="computeroutput"><span class="keyword">void</span></code>
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <span class="emphasis"><em>(cb^cb2)%cb3</em></span>. The default version of this
+ function is synthesised from other operations above.
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ &#160;
                 </p>
               </td>
+</tr>
+<tr>
 <td>
                 <p>
- Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&gt;&gt;</span>
- <span class="identifier">ui</span></code> and stores the result
- in <code class="computeroutput"><span class="identifier">b</span></code>, only required
- when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
+ <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_increment</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="keyword">void</span></code>
                 </p>
               </td>
 <td>
                 <p>
- void
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <span class="emphasis"><em>(cb^cb2)%a</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
+ of this function is synthesised from other operations above.
                 </p>
               </td>
 <td>
                 <p>
- Increments the value of <code class="computeroutput"><span class="identifier">b</span></code>
- by one.
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_decrement</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
                 <p>
- void
+ <code class="computeroutput"><span class="keyword">void</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Decrements the value of <code class="computeroutput"><span class="identifier">b</span></code>
- by one.
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <span class="emphasis"><em>(cb^a)%cb2</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
+ of this function is synthesised from other operations above.
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_is_zero</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ &#160;
                 </p>
               </td>
+</tr>
+<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">bool</span></code>
+ <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
                 </p>
               </td>
 <td>
                 <p>
- Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is zero, otherwise <code class="computeroutput"><span class="keyword">false</span></code>
+ <code class="computeroutput"><span class="keyword">void</span></code>
                 </p>
               </td>
-</tr>
-<tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <span class="emphasis"><em>(cb^a)%a</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
+ of this function is synthesised from other operations above.
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">int</span></code>
+ &#160;
                 </p>
               </td>
+</tr>
+<tr>
 <td>
                 <p>
- Returns a value &lt; zero if <code class="computeroutput"><span class="identifier">cb</span></code>
- is negative, a value &gt; zero if <code class="computeroutput"><span class="identifier">cb</span></code>
- is positive, and zero if <code class="computeroutput"><span class="identifier">cb</span></code>
- is zero.
+ <span class="emphasis"><em>Sign manipulation:</em></span>
                 </p>
               </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
 </tr>
 <tr>
 <td>
@@ -1698,7 +3017,17 @@
 <td>
                 <p>
                   Set <code class="computeroutput"><span class="identifier">b</span></code> to the absolute
- value of <code class="computeroutput"><span class="identifier">cb</span></code>.
+ value of <code class="computeroutput"><span class="identifier">cb</span></code>. The
+ default version of this functions assigns <code class="computeroutput"><span class="identifier">cb</span></code>
+ to <code class="computeroutput"><span class="identifier">b</span></code>, and then
+ calls <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code>
+ if <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span> <span class="special">&lt;</span>
+ <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1717,9 +3046,29 @@
 <td>
                 <p>
                   Set <code class="computeroutput"><span class="identifier">b</span></code> to the absolute
- value of <code class="computeroutput"><span class="identifier">cb</span></code>.
+ value of <code class="computeroutput"><span class="identifier">cb</span></code>. The
+ default version of this functions assigns <code class="computeroutput"><span class="identifier">cb</span></code>
+ to <code class="computeroutput"><span class="identifier">b</span></code>, and then
+ calls <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code>
+ if <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span> <span class="special">&lt;</span>
+ <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Floating point functions:</em></span>
                 </p>
               </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
 </tr>
 <tr>
 <td>
@@ -1734,9 +3083,15 @@
               </td>
 <td>
                 <p>
- Returns one of the same values returned by <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fpclassify</span></code>.
- Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ Returns one of the same values returned by <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fpclassify</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ will only test for zero <code class="computeroutput"><span class="identifier">cb</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1758,7 +3113,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1780,7 +3141,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1802,7 +3169,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1824,7 +3197,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1846,7 +3225,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1868,7 +3253,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1890,7 +3281,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1912,7 +3309,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1934,7 +3337,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1956,7 +3365,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -1978,7 +3393,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -2000,7 +3421,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -2022,7 +3449,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -2044,7 +3477,13 @@
                   on argument <code class="computeroutput"><span class="identifier">cb</span></code>
                   and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
                 </p>
               </td>
 </tr>
@@ -2068,38 +3507,20 @@
                   and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
                   the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_pow</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">cb2</span><span class="special">)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
                 </p>
               </td>
 <td>
                 <p>
- Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>
- on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
- and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
- the result in <code class="computeroutput"><span class="identifier">b</span></code>.
- Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_atan2</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <code class="computeroutput"><span class="identifier">eval_pow</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
                   <span class="identifier">cb</span><span class="special">,</span>
                   <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
@@ -2111,166 +3532,25 @@
               </td>
 <td>
                 <p>
- Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">atan</span></code>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>
                   on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
                   and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
                   the result in <code class="computeroutput"><span class="identifier">b</span></code>.
                   Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an floating-point type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_qr</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">cb2</span><span class="special">,</span>
- <span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">b2</span><span class="special">)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
- </p>
- </td>
-<td>
- <p>
- Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
- of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">/</span>
- <span class="identifier">cb2</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code> to the result of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
- <span class="identifier">cb2</span></code>. Only required when
- <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_integer_modulus</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="keyword">unsigned</span></code>
- </p>
- </td>
-<td>
- <p>
- Returns the result of <code class="computeroutput"><span class="identifier">cb</span>
- <span class="special">%</span> <span class="identifier">ui</span></code>.
- Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an integer type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_lsb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="keyword">unsigned</span></code>
- </p>
- </td>
-<td>
- <p>
- Returns the index of the least significant bit that is set. Only
- required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an integer type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_bit_test</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">ui</span><span class="special">)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="keyword">bool</span></code>
- </p>
- </td>
-<td>
- <p>
- Returns true if <code class="computeroutput"><span class="identifier">cb</span></code>
- has bit <code class="computeroutput"><span class="identifier">ui</span></code> set.
- Only required when <code class="computeroutput"><span class="identifier">B</span></code>
- is an integer type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_bit_set</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">ui</span><span class="special">)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
- </p>
- </td>
-<td>
- <p>
- Sets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
- in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
- when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_bit_unset</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
- </p>
- </td>
-<td>
- <p>
- Unsets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
- in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
- when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_bit_flip</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">ui</span><span class="special">)</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
                 </p>
               </td>
 <td>
                 <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
- </p>
- </td>
-<td>
- <p>
- Flips the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
- in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
- when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
+ &#160;
                 </p>
               </td>
 </tr>
 <tr>
 <td>
                 <p>
- <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <code class="computeroutput"><span class="identifier">eval_atan2</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
                   <span class="identifier">cb</span><span class="special">,</span>
                   <span class="identifier">cb2</span><span class="special">)</span></code>
                 </p>
@@ -2282,34 +3562,18 @@
               </td>
 <td>
                 <p>
- Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
- common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
- and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
- when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
- <span class="identifier">cb</span><span class="special">,</span>
- <span class="identifier">cb2</span><span class="special">)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="keyword">void</span></code>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">atan</span></code>
+ on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
                 </p>
               </td>
 <td>
                 <p>
- Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
- common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
- and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
- when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
- type.
+ &#160;
                 </p>
               </td>
 </tr>
@@ -2317,8 +3581,8 @@
 </table></div>
 </div>
 <br class="table-break"><p>
- The tables above place no <span class="emphasis"><em>throws</em></span> requirements on any
- of the operations. It is up to each type modelling this concept to decide
+ When the tables above place no <span class="emphasis"><em>throws</em></span> requirements on
+ an operation, then it is up to each type modelling this concept to decide
         when or whether throwing an exception is desirable. However, thrown exceptions
         should always either be the type, or inherit from the type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>.
         For example, a floating point type might choose to throw <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>

Modified: sandbox/big_number/libs/multiprecision/doc/html/index.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/index.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/index.html 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -118,7 +118,7 @@
 </div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: August 08, 2012 at 18:23:03 GMT</small></p></td>
+<td align="left"><p><small>Last revised: August 09, 2012 at 17:32:59 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>

Modified: sandbox/big_number/libs/multiprecision/doc/multiprecision.qbk
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/multiprecision.qbk (original)
+++ sandbox/big_number/libs/multiprecision/doc/multiprecision.qbk 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -47,7 +47,6 @@
 </imageobject>
 </inlinemediaobject>''']
 
-
 [section:intro Introduction]
 
 The Multiprecision Library provides ['User-defined] integer, rational and floating-point C++ types which
@@ -138,6 +137,12 @@
 Which don't noticably benefit from move support. Therefore, optimal performance comes from having both
 move-support, and expression templates enabled.
 
+Note that while "moved-from" objects are left in a sane state, they have an unspecified value, and the only permitted
+operations on them are destruction or the assignment of a new value. Any other operation should be considered
+a programming error and many backends will trigger an assertion if any other operation is attempted. This behavior
+allows for optimal performance on move-construction (i.e. no allocation required, we just take ownership of the existing
+object's internal state), while maintaining usability in the standard library containers.
+
 [h4 Expression Templates]
 
 TODO: compare to rvalue refs.
@@ -1730,13 +1735,17 @@
 [section:backendconc Backend Requirements]
 
 The requirements on the `Backend` template argument to `number` are split up into
-compulsory requirements, and optional requirements that are either to improve performance
-or provide optional features.
+sections: compulsary and optional.
+
+Compulsary requirements have no default implementation in the library, therefore if the feature
+they implement is to be supported at all, then they must be implemented by the backend.
 
-TODO: Add optional construction support, add throws specification, clarify what compulsory means.
+Optional requirements have default implementations that are called if the backend doesn't provide
+it's own. Typically the backend will implement these to improve performance.
 
 In the following tables, type B is the `Backend` template arument to `number`, `b` and `b2` are
-a variables of type B, `cb` and `cb2` are constant variables of type B, `a` is a variable of Arithmetic type,
+a variables of type B, `cb`, `cb2` and `cb3` are constant variables of type `const B`,
+`rb` is a variable of type `B&&`, `a` and `a2` are variables of Arithmetic type,
 `s` is a variable of type `const char*`, `ui` is a variable of type `unsigned`, `bb` is a variable of type `bool`,
 `pa` is a variable of type pointer-to-arithmetic-type, `exp` is a variable of type `B::exp_type`,
 `pexp` is a variable of type `B::exp_type*`, `i` is a variable of type `int`, `pi` pointer to a variable of type `int`,
@@ -1744,157 +1753,325 @@
 of type B2.
 
 [table Compulsory Requirements on the Backend type.
-[[Expression][Return Type][Comments]]
+[[Expression][Return Type][Comments][Throws]]
 [[`B::signed_types`][`mpl::list<type-list>`][A list of signed integral types that can be assigned to type B. The types shall be
- listed in order of size, smallest first, and shall terminate in the type that is `std::intmax_t`.]]
+ listed in order of size, smallest first, and shall terminate in the type that is `std::intmax_t`.][[space]]]
 [[`B::unsigned_types`][`mpl::list<type-list>`][A list of unsigned integral types that can be assigned to type B. The types shall be
- listed in order of size, smallest first, and shall terminate in the type that is `std::uintmax_t`.]]
+ listed in order of size, smallest first, and shall terminate in the type that is `std::uintmax_t`.][[space]]]
 [[`B::float_types`][`mpl::list<type-list>`][A list of floating-point types that can be assigned to type B.The types shall be
- listed in order of size, smallest first, and shall terminate in type `long double`.]]
-[[`B::exponent_type`][A signed integral type.][The type of the exponent of type B.]]
-[[`B()`][ ][Default constructor.]]
-[[`B(cb)`][ ][Copy Constructor.]]
-[[`b = b`][`B&`][Assignment operator.]]
+ listed in order of size, smallest first, and shall terminate in type `long double`.][[space]]]
+[[`B::exponent_type`][A signed integral type.][The type of the exponent of type B. This type is required only for floating point types.][[space]]]
+[[`B()`][ ][Default constructor.][[space]]]
+[[`B(cb)`][ ][Copy Constructor.][[space]]]
+[[`b = b`][`B&`][Assignment operator.][[space]]]
 [[`b = a`][`B&`][Assignment from an Arithmetic type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`b = s`][`B&`][Assignment from a string.]]
-[[`b.swap(b)`][`void`][Swaps the contents of its arguments.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.][[space]]]
+[[`b = s`][`B&`][Assignment from a string.][Throws a `std::runtime_error` if the string could not be interpretted as a valid number.]]
+[[`b.swap(b)`][`void`][Swaps the contents of its arguments.][`noexcept`]]
 [[`cb.str(ui, bb)`][`std::string`][Returns the string representation of `b` with `ui` digits and in scientific format if `bb` is `true`.
- If `ui` is zero, then returns as many digits as are required to reconstruct the original value.]]
-[[`b.negate()`][`void`][Negates `b`.]]
+ If `ui` is zero, then returns as many digits as are required to reconstruct the original value.][[space]]]
+[[`b.negate()`][`void`][Negates `b`.][[space]]]
 [[`cb.compare(cb2)`][`int`][Compares `cb` and `cb2`, returns a value less than zero if `cb < cb2`, a value greater than zero if `cb > cb2` and zero
- if `cb == cb2`.]]
+ if `cb == cb2`.][`noexcept`]]
 [[`cb.compare(a)`][`int`][Compares `cb` and `a`, returns a value less than zero if `cb < a`, a value greater than zero if `cb > a` and zero
                    if `cb == a`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_add(b, cb)`][`void`][Adds `cb` to `b`.]]
-[[`eval_subtract(b, cb)`][`void`][Subtracts `cb` from `b`.]]
-[[`eval_multiply(b, cb)`][`void`][Multiplies `b` by `cb`.]]
-[[`eval_divide(b, cb)`][`void`][Divides `b` by `cb`.]]
-[[`eval_modulus(b, cb)`][`void`][Computes `b %= cb`, only required when `B` is an integer type.]]
-[[`eval_bitwise_and(b, cb)`][`void`][Computes `b &= cb`, only required when `B` is an integer type.]]
-[[`eval_bitwise_or(b, cb)`][`void`][Computes `b |= cb`, only required when `B` is an integer type.]]
-[[`eval_bitwise_xor(b, cb)`][`void`][Computes `b ^= cb`, only required when `B` is an integer type.]]
-[[`eval_complement(b, cb)`][`void`][Computes the ones-complement of `cb` and stores the result in `b`, only required when `B` is an integer type.]]
-[[`eval_left_shift(b, ui)`][`void`][Computes `b <<= ui`, only required when `B` is an integer type.]]
-[[`eval_right_shift(b, ui)`][`void`][Computes `b >>= ui`, only required when `B` is an integer type.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.][[space]]]
+[[`eval_add(b, cb)`][`void`][Adds `cb` to `b`.][[space]]]
+[[`eval_subtract(b, cb)`][`void`][Subtracts `cb` from `b`.][[space]]]
+[[`eval_multiply(b, cb)`][`void`][Multiplies `b` by `cb`.][[space]]]
+[[`eval_divide(b, cb)`][`void`][Divides `b` by `cb`.]
+ [`std::overflow_error` if cb has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_modulus(b, cb)`][`void`][Computes `b %= cb`, only required when `B` is an integer type.]
+ [`std::overflow_error` if cb has the value zero.]]
+[[`eval_bitwise_and(b, cb)`][`void`][Computes `b &= cb`, only required when `B` is an integer type.][[space]]]
+[[`eval_bitwise_or(b, cb)`][`void`][Computes `b |= cb`, only required when `B` is an integer type.][[space]]]
+[[`eval_bitwise_xor(b, cb)`][`void`][Computes `b ^= cb`, only required when `B` is an integer type.][[space]]]
+[[`eval_complement(b, cb)`][`void`][Computes the ones-complement of `cb` and stores the result in `b`, only required when `B` is an integer type.][[space]]]
+[[`eval_left_shift(b, ui)`][`void`][Computes `b <<= ui`, only required when `B` is an integer type.][[space]]]
+[[`eval_right_shift(b, ui)`][`void`][Computes `b >>= ui`, only required when `B` is an integer type.][[space]]]
 [[`eval_convert_to(pa, cb)`][`void`][Converts `cb` to the type of `*pa` and store the result in `*pa`. Type `B` shall support
                      conversion to at least types `std::intmax_t`, `std::uintmax_t` and `long long`.
                      Conversion to other arithmetic types can then be synthesised using other operations.
- Conversions to other types are entirely optional.]]
-[[`eval_frexp(b, cb, pexp)`][`void`][Stores values in `b` and `*pexp` such that the value of `cb` is b * 2[super *pexp], only required when `B` is a floating-point type.]]
-[[`eval_ldexp(b, cb, exp)`][`void`][Stores a value in `b` that is cb * 2[super exp], only required when `B` is a floating-point type.]]
-[[`eval_frexp(b, cb, pi)`][`void`][Stores values in `b` and `*pi` such that the value of `cb` is b * 2[super *pi], only required when `B` is a floating-point type.]]
-[[`eval_ldexp(b, cb, i)`][`void`][Stores a value in `b` that is cb * 2[super i], only required when `B` is a floating-point type.]]
-[[`eval_floor(b, cb)`][`void`][Stores the floor of `cb` in `b`, only required when `B` is a floating-point type.]]
-[[`eval_ceil(b, cb)`][`void`][Stores the ceiling of `cb` in `b`, only required when `B` is a floating-point type.]]
-[[`eval_sqrt(b, cb)`][`void`][Stores the square root of `cb` in `b`, only required when `B` is a floating-point type.]]
+ Conversions to other types are entirely optional.][[space]]]
+[[`eval_frexp(b, cb, pexp)`][`void`][Stores values in `b` and `*pexp` such that the value of `cb` is b * 2[super *pexp], only required when `B` is a floating-point type.][[space]]]
+[[`eval_ldexp(b, cb, exp)`][`void`][Stores a value in `b` that is cb * 2[super exp], only required when `B` is a floating-point type.][[space]]]
+[[`eval_frexp(b, cb, pi)`][`void`][Stores values in `b` and `*pi` such that the value of `cb` is b * 2[super *pi], only required when `B` is a floating-point type.]
+ [`std::runtime_error` if the exponent of cb is too large to be stored in an `int`.]]
+[[`eval_ldexp(b, cb, i)`][`void`][Stores a value in `b` that is cb * 2[super i], only required when `B` is a floating-point type.][[space]]]
+[[`eval_floor(b, cb)`][`void`][Stores the floor of `cb` in `b`, only required when `B` is a floating-point type.][[space]]]
+[[`eval_ceil(b, cb)`][`void`][Stores the ceiling of `cb` in `b`, only required when `B` is a floating-point type.][[space]]]
+[[`eval_sqrt(b, cb)`][`void`][Stores the square root of `cb` in `b`, only required when `B` is a floating-point type.][[space]]]
 [[`boost::multiprecision::number_category<B>::type`][`mpl::int_<N>`][`N` is one of the values `number_kind_integer`, `number_kind_floating_point`, `number_kind_rational` or `number_kind_fixed_point`.
- Defaults to `number_kind_floating_point`.]]
+ Defaults to `number_kind_floating_point`.][[space]]]
 ]
 
 [table Optional Requirements on the Backend Type
-[[Expression][Returns][Comments]]
-[[`B(b2)`][`B`][Copy constructor from a different back-end type.]]
-[[`b = b2`][`b&`][Assignment operator from a different back-end type.]]
+[[Expression][Returns][Comments][Throws]]
+
+[[['Construct and assign:]]]
+[[`B(rb)`][`B`][Move constructor. Afterwards variable `rb` shall be in sane state, albeit with unspecified value.
+ Only destruction and assignment to the moved-from variable `rb` need be supported after the operation.][`noexcept`]]
+[[`b = rb`][`B&`][Move-assign. Afterwards variable `rb` shall be in sane state, albeit with unspecified value.
+ Only destruction and assignment to the moved-from variable `rb` need be supported after the operation.][`noexcept`]]
+[[`B(a)`][`B`][Direct construction from an arithmetic type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, this operation is simulated using default-construction followed by assignment.][[space]]]
+[[`B(b2)`][`B`][Copy constructor from a different back-end type. When not provided, a generic interconversion routine is used.][[space]]]
+[[`b = b2`][`b&`][Assignment operator from a different back-end type. When not provided, a generic interconversion routine is used.][[space]]]
 [[`assign_components(b, a, a)`][`void`][Assigns to `b` the two components in the following arguments.
- Only applies to rational and complex number types.]]
+ Only applies to rational and complex number types.
+ When not provided, arithmetic operations are used to synthesise the result from the two values.][[space]]]
 [[`assign_components(b, b2, b2)`][`void`][Assigns to `b` the two components in the following arguments.
- Only applies to rational and complex number types.]]
+ Only applies to rational and complex number types.
+ When not provided, arithmetic operations are used to synthesise the result from the two values.][[space]]]
+
+[[['Comparisons:]]]
+[[`eval_eq(cb, cb2)`][`bool`][Returns `true` if `cb` and `cb2` are equal in value.
+ When not provided, the default implementation returns `cb.compare(cb2) == 0`.][`noexcept`]]
+[[`eval_eq(cb, a)`][`bool`][Returns `true` if `cb` and `a` are equal in value.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, return the equivalent of `eval_eq(cb, B(a))`.][[space]]]
+[[`eval_eq(a, cb)`][`bool`][Returns `true` if `cb` and `a` are equal in value.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version returns `eval_eq(cb, a)`.][[space]]]
+[[`eval_lt(cb, cb2)`][`bool`][Returns `true` if `cb` is less than `cb2` in value.
+ When not provided, the default implementation returns `cb.compare(cb2) < 0`.][`noexcept`]]
+[[`eval_lt(cb, a)`][`bool`][Returns `true` if `cb` is less than `a` in value.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default implementation returns `eval_lt(cb, B(a))`.][[space]]]
+[[`eval_lt(a, cb)`][`bool`][Returns `true` if `a` is less than `cb` in value.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default implementation returns `eval_gt(cb, a)`.][[space]]]
+[[`eval_gt(cb, cb2)`][`bool`][Returns `true` if `cb` is greater than `cb2` in value.
+ When not provided, the default implementation returns `cb.compare(cb2) > 0`.][`noexcept`]]
+[[`eval_gt(cb, a)`][`bool`][Returns `true` if `cb` is greater than `a` in value.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default implementation returns `eval_gt(cb, B(a))`.][[space]]]
+[[`eval_gt(a, cb)`][`bool`][Returns `true` if `a` is greater than `cb` in value.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default implementation returns `eval_lt(cb, a)`.][[space]]]
+[[`eval_is_zero(cb)`][`bool`][Returns `true` if `cb` is zero, otherwise `false`. The default version of this function
+ returns `cb.compare(ui_type(0)) == 0`, where `ui_type` is `ui_type` is
+ `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
+[[`eval_get_sign(cb)`][`int`][Returns a value < zero if `cb` is negative, a value > zero if `cb` is positive, and zero if `cb` is zero.
+ The default version of this function
+ returns `cb.compare(ui_type(0))`, where `ui_type` is `ui_type` is
+ `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
+
+[[['Basic arithmetic:]]]
 [[`eval_add(b, a)`][`void`][Adds `a` to `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_subtract(b, a)`][`void`][Subtracts `a` from `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_multiply(b, a)`][`void`][Multiplies `b` by `a`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_divide(b, a)`][`void`][Divides `b` by `a`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_modulus(b, a)`][`void`][Computes `b %= cb`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_bitwise_and(b, a)`][`void`][Computes `b &= cb`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_bitwise_or(b, a)`][`void`][Computes `b |= cb`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_bitwise_xor(b, a)`][`void`][Computes `b ^= cb`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_add(b, cb, cb2)`][`void`][Add `cb` to `cb2` and stores the result in `b`.]]
-[[`eval_subtract(b, cb, cb2)`][`void`][Subtracts `cb2` from `cb` and stores the result in `b`.]]
-[[`eval_multiply(b, cb, cb2)`][`void`][Multiplies `cb` by `cb2` and stores the result in `b`.]]
-[[`eval_divide(b, cb, cb2)`][`void`][Divides `cb` by `cb2` and stores the result in `b`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version calls `eval_add(b, B(a))`][[space]]]
+[[`eval_add(b, cb, cb2)`][`void`][Add `cb` to `cb2` and stores the result in `b`.
+ When not provided, does the equivalent of `b = cb; eval_add(b, cb2)`.][[space]]]
 [[`eval_add(b, cb, a)`][`void`][Add `cb` to `a` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_subtract(b, cb, a)`][`void`][Subtracts `a` from `cb` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_multiply(b, cb, a)`][`void`][Multiplies `cb` by `a` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_divide(b, cb, a)`][`void`][Divides `cb` by `a` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_modulus(b, cb, cb2)`][`void`][Computes `cb % cb2` and stores the result in `b`, only required when `B` is an integer type.]]
-[[`eval_bitwise_and(b, cb, cb2)`][`void`][Computes `cb & cb2` and stores the result in `b`, only required when `B` is an integer type.]]
-[[`eval_bitwise_or(b, cb, cb2)`][`void`][Computes `cb | cb2` and stores the result in `b`, only required when `B` is an integer type.]]
-[[`eval_bitwise_xor(b, cb, cb2)`][`void`][Computes `cb ^ cb2` and stores the result in `b`, only required when `B` is an integer type.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_add(b, cb, B(a))`.][[space]]]
 [[`eval_add(b, a, cb)`][`void`][Add `a` to `cb` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_add(b, cb, a)`.][[space]]]
+[[`eval_subtract(b, a)`][`void`][Subtracts `a` from `b`. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version calls `eval_subtract(b, B(a))`][[space]]]
+[[`eval_subtract(b, cb, cb2)`][`void`][Subtracts `cb2` from `cb` and stores the result in `b`.
+ When not provided, does the equivalent of `b = cb; eval_subtract(b, cb2)`.][[space]]]
+[[`eval_subtract(b, cb, a)`][`void`][Subtracts `a` from `cb` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_subtract(b, cb, B(a))`.][[space]]]
 [[`eval_subtract(b, a, cb)`][`void`][Subtracts `cb` from `a` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_subtract(b, cb, a); b.negate();`.][[space]]]
+[[`eval_multiply(b, a)`][`void`][Multiplies `b` by `a`. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version calls `eval_multiply(b, B(a))`][[space]]]
+[[`eval_multiply(b, cb, cb2)`][`void`][Multiplies `cb` by `cb2` and stores the result in `b`.
+ When not provided, does the equivalent of `b = cb; eval_multiply(b, cb2)`.][[space]]]
+[[`eval_multiply(b, cb, a)`][`void`][Multiplies `cb` by `a` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_multiply(b, cb, B(a))`.][[space]]]
 [[`eval_multiply(b, a, cb)`][`void`][Multiplies `a` by `cb` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_multiply(b, cb, a)`.][[space]]]
+[[`eval_divide(b, a)`][`void`][Divides `b` by `a`. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version calls `eval_divide(b, B(a))`]
+ [`std::overflow_error` if `a` has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_divide(b, cb, cb2)`][`void`][Divides `cb` by `cb2` and stores the result in `b`.
+ When not provided, does the equivalent of `b = cb; eval_divide(b, cb2)`.]
+ [`std::overflow_error` if `cb2` has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_divide(b, cb, a)`][`void`][Divides `cb` by `a` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_divide(b, cb, B(a))`.]
+ [`std::overflow_error` if `a` has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
 [[`eval_divide(b, a, cb)`][`void`][Divides `a` by `cb` and stores the result in `b`. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_divide(b, B(a), cb)`.]
+ [`std::overflow_error` if cb has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_increment(b)`][void][Increments the value of `b` by one.
+ When not provided, does the equivalent of `eval_add(b, static_cast<ui_type>(1u))`.
+ Where `ui_type` is `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
+[[`eval_decrement(b)`][void][Decrements the value of `b` by one.
+ When not provided, does the equivalent of `eval_subtract(b, static_cast<ui_type>(1u))`.
+ Where `ui_type` is `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
+
+[[['Integer specific operations:]]]
+[[`eval_modulus(b, a)`][`void`][Computes `b %= cb`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version calls `eval_modulus(b, B(a))`]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_modulus(b, cb, cb2)`][`void`][Computes `cb % cb2` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_modulus(b, cb2)`.]
+ [`std::overflow_error` if `a` has the value zero.]]
 [[`eval_modulus(b, cb, a)`][`void`][Computes `cb % a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_bitwise_and(b, cb, a)`][`void`][Computes `cb & a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_bitwise_or(b, cb, a)`][`void`][Computes `cb | a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_bitwise_xor(b, cb, a)`][`void`][Computes `cb ^ a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_modulus(b, cb, B(a))`.]
+ [`std::overflow_error` if `a` has the value zero.]]
 [[`eval_modulus(b, a, cb)`][`void`][Computes `cb % a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_modulus(b, B(a), cb)`.]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_bitwise_and(b, a)`][`void`][Computes `b &= cb`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version calls `eval_bitwise_and(b, B(a))`][[space]]]
+[[`eval_bitwise_and(b, cb, cb2)`][`void`][Computes `cb & cb2` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_bitwise_and(b, cb2)`.][[space]]]
+[[`eval_bitwise_and(b, cb, a)`][`void`][Computes `cb & a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_bitwise_and(b, cb, B(a))`.][[space]]]
 [[`eval_bitwise_and(b, a, cb)`][`void`][Computes `cb & a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_bitwise_and(b, cb, a)`.][[space]]]
+[[`eval_bitwise_or(b, a)`][`void`][Computes `b |= cb`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version calls `eval_bitwise_or(b, B(a))`][[space]]]
+[[`eval_bitwise_or(b, cb, cb2)`][`void`][Computes `cb | cb2` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_bitwise_or(b, cb2)`.][[space]]]
+[[`eval_bitwise_or(b, cb, a)`][`void`][Computes `cb | a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_bitwise_or(b, cb, B(a))`.][[space]]]
 [[`eval_bitwise_or(b, a, cb)`][`void`][Computes `cb | a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_bitwise_or(b, cb, a)`.][[space]]]
+[[`eval_bitwise_xor(b, a)`][`void`][Computes `b ^= cb`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, the default version calls `eval_bitwise_xor(b, B(a))`][[space]]]
+[[`eval_bitwise_xor(b, cb, cb2)`][`void`][Computes `cb ^ cb2` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_bitwise_xor(b, cb2)`.][[space]]]
+[[`eval_bitwise_xor(b, cb, a)`][`void`][Computes `cb ^ a` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_bitwise_xor(b, cb, B(a))`.][[space]]]
 [[`eval_bitwise_xor(b, a, cb)`][`void`][Computes `a ^ cb` and stores the result in `b`, only required when `B` is an integer type. The type of `a` shall be listed in one of the type lists
- `B::signed_types`, `B::unsigned_types` or `B::float_types`.]]
-[[`eval_left_shift(b, cb, ui)`][`void`][Computes `cb << ui` and stores the result in `b`, only required when `B` is an integer type.]]
-[[`eval_right_shift(b, cb, ui)`][`void`][Computes `cb >> ui` and stores the result in `b`, only required when `B` is an integer type.]]
-[[`eval_increment(b)`][void][Increments the value of `b` by one.]]
-[[`eval_decrement(b)`][void][Decrements the value of `b` by one.]]
-[[`eval_is_zero(cb)`][`bool`][Returns `true` if `cb` is zero, otherwise `false`]]
-[[`eval_get_sign(cb)`][`int`][Returns a value < zero if `cb` is negative, a value > zero if `cb` is positive, and zero if `cb` is zero.]]
-[[`eval_abs(b, cb)`][`void`][Set `b` to the absolute value of `cb`.]]
-[[`eval_fabs(b, cb)`][`void`][Set `b` to the absolute value of `cb`.]]
-[[`eval_fpclassify(cb)`][`int`][Returns one of the same values returned by `std::fpclassify`. Only required when `B` is an floating-point type.]]
-[[`eval_trunc(b, cb)`][`void`][Performs the equivalent operation to `std::trunc` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_round(b, cb)`][`void`][Performs the equivalent operation to `std::round` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_exp(b, cb)`][`void`][Performs the equivalent operation to `std::exp` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_log(b, cb)`][`void`][Performs the equivalent operation to `std::log` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_log10(b, cb)`][`void`][Performs the equivalent operation to `std::log10` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_sin(b, cb)`][`void`][Performs the equivalent operation to `std::sin` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_cos(b, cb)`][`void`][Performs the equivalent operation to `std::cos` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_tan(b, cb)`][`void`][Performs the equivalent operation to `std::exp` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_asin(b, cb)`][`void`][Performs the equivalent operation to `std::asin` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_acos(b, cb)`][`void`][Performs the equivalent operation to `std::acos` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_atan(b, cb)`][`void`][Performs the equivalent operation to `std::atan` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_sinh(b, cb)`][`void`][Performs the equivalent operation to `std::sinh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_cosh(b, cb)`][`void`][Performs the equivalent operation to `std::cosh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_tanh(b, cb)`][`void`][Performs the equivalent operation to `std::tanh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_fmod(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::fmod` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_pow(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::pow` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_atan2(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::atan` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.]]
-[[`eval_qr(cb, cb2, b, b2)`][`void`][Sets `b` to the result of `cb / cb2` and `b2` to the result of `cb % cb2`. Only required when `B` is an integer type.]]
-[[`eval_integer_modulus(cb, ui)`][`unsigned`][Returns the result of `cb % ui`. Only required when `B` is an integer type.]]
-[[`eval_lsb(cb)`][`unsigned`][Returns the index of the least significant bit that is set. Only required when `B` is an integer type.]]
-[[`eval_bit_test(cb, ui)`][`bool`][Returns true if `cb` has bit `ui` set. Only required when `B` is an integer type.]]
-[[`eval_bit_set(b, ui)`][`void`][Sets the bit at index `ui` in `b`. Only required when `B` is an integer type.]]
-[[`eval_bit_unset(b, ui)`][`void`][Unsets the bit at index `ui` in `b`. Only required when `B` is an integer type.]]
-[[`eval_bit_flip(b, ui)`][`void`][Flips the bit at index `ui` in `b`. Only required when `B` is an integer type.]]
-[[`eval_gcd(b, cb, cb2)`][`void`][Sets `b` to the greatest common divisor of `cb` and `cb2`. Only required when `B` is an integer type.]]
-[[`eval_lcm(b, cb, cb2)`][`void`][Sets `b` to the least common multiple of `cb` and `cb2`. Only required when `B` is an integer type.]]
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ When not provided, does the equivalent of `eval_bitwise_xor(b, cb, a)`.][[space]]]
+[[`eval_left_shift(b, cb, ui)`][`void`][Computes `cb << ui` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_left_shift(b, a);`.][[space]]]
+[[`eval_right_shift(b, cb, ui)`][`void`][Computes `cb >> ui` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_right_shift(b, a);`.][[space]]]
+[[`eval_qr(cb, cb2, b, b2)`][`void`][Sets `b` to the result of `cb / cb2` and `b2` to the result of `cb % cb2`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_integer_modulus(cb, ui)`][`unsigned`][Returns the result of `cb % ui`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_lsb(cb)`][`unsigned`][Returns the index of the least significant bit that is set. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_bit_test(cb, ui)`][`bool`][Returns true if `cb` has bit `ui` set. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_bit_set(b, ui)`][`void`][Sets the bit at index `ui` in `b`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_bit_unset(b, ui)`][`void`][Unsets the bit at index `ui` in `b`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_bit_flip(b, ui)`][`void`][Flips the bit at index `ui` in `b`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_gcd(b, cb, cb2)`][`void`][Sets `b` to the greatest common divisor of `cb` and `cb2`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_lcm(b, cb, cb2)`][`void`][Sets `b` to the least common multiple of `cb` and `cb2`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_gcd(b, cb, a)`][`void`][Sets `b` to the greatest common divisor of `cb` and `cb2`. Only required when `B` is an integer type.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ The default version of this function calls `eval_gcd(b, cb, B(a))`.][[space]]]
+[[`eval_lcm(b, cb, a)`][`void`][Sets `b` to the least common multiple of `cb` and `cb2`. Only required when `B` is an integer type.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ The default version of this function calls `eval_lcm(b, cb, B(a))`.][[space]]]
+[[`eval_gcd(b, a, cb)`][`void`][Sets `b` to the greatest common divisor of `cb` and `a`. Only required when `B` is an integer type.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ The default version of this function calls `eval_gcd(b, cb, a)`.][[space]]]
+[[`eval_lcm(b, a, cb)`][`void`][Sets `b` to the least common multiple of `cb` and `a`. Only required when `B` is an integer type.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ The default version of this function calls `eval_lcm(b, cb, a)`.][[space]]]
+[[`eval_powm(b, cb, cb2, cb3)`][`void`][Sets `b` to the result of ['(cb^cb2)%cb3].
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_powm(b, cb, cb2, a)`][`void`][Sets `b` to the result of ['(cb^cb2)%a].
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types`.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_powm(b, cb, a, cb2)`][`void`][Sets `b` to the result of ['(cb^a)%cb2].
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types`.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_powm(b, cb, a, a2)`][`void`][Sets `b` to the result of ['(cb^a)%a2].
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types`.
+ The default version of this function is synthesised from other operations above.][[space]]]
+
+[[['Sign manipulation:]]]
+[[`eval_abs(b, cb)`][`void`][Set `b` to the absolute value of `cb`.
+ The default version of this functions assigns `cb` to `b`, and then calls `b.negate()` if
+ `eval_get_sign(cb) < 0`.][[space]]]
+[[`eval_fabs(b, cb)`][`void`][Set `b` to the absolute value of `cb`.
+ The default version of this functions assigns `cb` to `b`, and then calls `b.negate()` if
+ `eval_get_sign(cb) < 0`.][[space]]]
+
+[[['Floating point functions:]]]
+[[`eval_fpclassify(cb)`][`int`][Returns one of the same values returned by `std::fpclassify`. Only required when `B` is an floating-point type.
+ The default version of this function will only test for zero `cb`.][[space]]]
+[[`eval_trunc(b, cb)`][`void`][Performs the equivalent operation to `std::trunc` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_round(b, cb)`][`void`][Performs the equivalent operation to `std::round` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_exp(b, cb)`][`void`][Performs the equivalent operation to `std::exp` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_log(b, cb)`][`void`][Performs the equivalent operation to `std::log` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_log10(b, cb)`][`void`][Performs the equivalent operation to `std::log10` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_sin(b, cb)`][`void`][Performs the equivalent operation to `std::sin` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_cos(b, cb)`][`void`][Performs the equivalent operation to `std::cos` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_tan(b, cb)`][`void`][Performs the equivalent operation to `std::exp` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_asin(b, cb)`][`void`][Performs the equivalent operation to `std::asin` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_acos(b, cb)`][`void`][Performs the equivalent operation to `std::acos` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_atan(b, cb)`][`void`][Performs the equivalent operation to `std::atan` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_sinh(b, cb)`][`void`][Performs the equivalent operation to `std::sinh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_cosh(b, cb)`][`void`][Performs the equivalent operation to `std::cosh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_tanh(b, cb)`][`void`][Performs the equivalent operation to `std::tanh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_fmod(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::fmod` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_pow(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::pow` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_atan2(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::atan` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
 ]
 
-The tables above place no ['throws] requirements on any of the operations. It is up to each type modelling this concept to
+When the tables above place no ['throws] requirements on an operation, then it is up to each type modelling this concept to
 decide when or whether throwing an exception is desirable. However, thrown exceptions should always either be the type, or
 inherit from the type `std::runtime_error`. For example, a floating point type might choose to throw `std::overflow_error`
 whenever the result of an operation would be infinite, and `std::underflow_error` whenever it would round to zero.

Modified: sandbox/big_number/libs/multiprecision/test/test_arithmetic.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_arithmetic.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_arithmetic.cpp 2012-08-10 04:37:37 EDT (Fri, 10 Aug 2012)
@@ -245,7 +245,7 @@
    //
    if(!is_boost_rational(a))
    {
- BOOST_CHECK_THROW(Real(a / 0), std::runtime_error);
+ BOOST_CHECK_THROW(Real(a / 0), std::overflow_error);
       BOOST_CHECK_THROW(Real("3.14"), std::runtime_error);
       b = "2/3";
       BOOST_CHECK_EQUAL(a, b);
@@ -557,7 +557,7 @@
    //
    BOOST_CHECK_THROW(Real("3.14"), std::runtime_error);
    BOOST_CHECK_THROW(Real("3L"), std::runtime_error);
- BOOST_CHECK_THROW(Real(Real(20) / 0u), std::runtime_error);
+ BOOST_CHECK_THROW(Real(Real(20) / 0u), std::overflow_error);
 }
 
 template <class Real, class T>
@@ -636,7 +636,7 @@
       }
       else
       {
- BOOST_CHECK_THROW(Real(Real(20) / 0u), std::runtime_error);
+ BOOST_CHECK_THROW(Real(Real(20) / 0u), std::overflow_error);
       }
    }
 }


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