Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r67547 - in sandbox/chrono/libs/mpl: . doc doc/src doc/src/refmanual test
From: vicente.botet_at_[hidden]
Date: 2011-01-01 13:12:38


Author: viboes
Date: 2011-01-01 13:12:37 EST (Sat, 01 Jan 2011)
New Revision: 67547
URL: http://svn.boost.org/trac/boost/changeset/67547

Log:
StaticInteger: Add mpl doc and tests
Added:
   sandbox/chrono/libs/mpl/
   sandbox/chrono/libs/mpl/doc/
   sandbox/chrono/libs/mpl/doc/src/
   sandbox/chrono/libs/mpl/doc/src/refmanual/
   sandbox/chrono/libs/mpl/doc/src/refmanual/NumericMetafunction.rst (contents, props changed)
   sandbox/chrono/libs/mpl/doc/src/refmanual/abs.rst (contents, props changed)
   sandbox/chrono/libs/mpl/doc/src/refmanual/gcd.rst (contents, props changed)
   sandbox/chrono/libs/mpl/doc/src/refmanual/lcm.rst (contents, props changed)
   sandbox/chrono/libs/mpl/doc/src/refmanual/sign.rst (contents, props changed)
   sandbox/chrono/libs/mpl/test/
   sandbox/chrono/libs/mpl/test/arithmetic.cpp (contents, props changed)

Added: sandbox/chrono/libs/mpl/doc/src/refmanual/NumericMetafunction.rst
==============================================================================
--- (empty file)
+++ sandbox/chrono/libs/mpl/doc/src/refmanual/NumericMetafunction.rst 2011-01-01 13:12:37 EST (Sat, 01 Jan 2011)
@@ -0,0 +1,148 @@
+.. Metafunctions/Concepts//Numeric Metafunction |60
+
+Numeric Metafunction
+====================
+
+Description
+-----------
+
+A |Numeric Metafunction| is a |tag dispatched metafunction| that provides
+a built-in infrastructure for easy implementation of mixed-type operations.
+
+
+Expression requirements
+-----------------------
+
+|In the following table...| ``op`` is a placeholder token for the actual
+|Numeric Metafunction|'s name, and ``x``, ``y`` and |x1...xn| are
+arbitrary numeric types.
+
++-------------------------------------------+-----------------------+---------------------------+
+| Expression | Type | Complexity |
++===========================================+=======================+===========================+
+|``op_tag<x>::type`` | |Integral Constant| | Amortized constant time. |
++-------------------------------------------+-----------------------+---------------------------+
+| .. parsed-literal:: | Any type | Unspecified. |
+| | | |
+| op_impl< | | |
+| op_tag<x>::type | | |
+| , op_tag<y>::type | | |
+| >::apply<x,y>::type | | |
++-------------------------------------------+-----------------------+---------------------------+
+|``op<``\ |x1...xn|\ ``>::type`` | Any type | Unspecified. |
++-------------------------------------------+-----------------------+---------------------------+
+
+
+Expression semantics
+--------------------
+
+.. parsed-literal::
+
+ typedef op_tag<x>::type tag;
+
+:Semantics:
+ ``tag`` is a tag type for ``x`` for ``op``.
+ ``tag::value`` is ``x``\ 's *conversion rank*.
+
+
+.. ..........................................................................
+
+.. parsed-literal::
+
+ typedef op_impl<
+ op_tag<x>::type
+ , op_tag<y>::type
+ >::apply<x,y>::type r;
+
+:Semantics:
+ ``r`` is the result of ``op`` application on arguments ``x``
+ and ``y``.
+
+
+.. ..........................................................................
+
+.. parsed-literal::
+
+ typedef op<\ |x1...xn|\ >::type r;
+
+:Semantics:
+ ``r`` is the result of ``op`` application on arguments |x1...xn|.
+
+
+
+
+Example
+-------
+
+.. parsed-literal::
+
+
+ struct complex_tag : int_<10> {};
+
+ template< typename Re, typename Im > struct complex
+ {
+ typedef complex_tag tag;
+ typedef complex type;
+ typedef Re real;
+ typedef Im imag;
+ };
+
+ template< typename C > struct real : C::real {};
+ template< typename C > struct imag : C::imag {};
+
+ namespace boost { namespace mpl {
+
+ template<>
+ struct plus_impl< complex_tag,complex_tag >
+ {
+ template< typename N1, typename N2 > struct apply
+ : complex<
+ plus< typename N1::real, typename N2::real >
+ , plus< typename N1::imag, typename N2::imag >
+ >
+ {
+ };
+ };
+
+ }}
+
+ typedef complex< int_<5>, int_<-1> > c1;
+ typedef complex< int_<-5>, int_<1> > c2;
+
+ typedef plus<c1,c2> r1;
+ BOOST_MPL_ASSERT_RELATION( real<r1>::value, ==, 0 );
+ BOOST_MPL_ASSERT_RELATION( imag<r1>::value, ==, 0 );
+
+ typedef plus<c1,c1> r2;
+ BOOST_MPL_ASSERT_RELATION( real<r2>::value, ==, 10 );
+ BOOST_MPL_ASSERT_RELATION( imag<r2>::value, ==, -2 );
+
+ typedef plus<c2,c2> r3;
+ BOOST_MPL_ASSERT_RELATION( real<r3>::value, ==, -10 );
+ BOOST_MPL_ASSERT_RELATION( imag<r3>::value, ==, 2 );
+
+
+
+Models
+------
+
+* |plus|
+* |minus|
+* |times|
+* |divides|
+* |modulus|
+* |negate|
+* |abs|
+* |sign|
+* |gcd|
+
+
+See also
+--------
+
+|Tag Dispatched Metafunction|, |Metafunctions|, |numeric_cast|
+
+
+.. copyright:: Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Added: sandbox/chrono/libs/mpl/doc/src/refmanual/abs.rst
==============================================================================
--- (empty file)
+++ sandbox/chrono/libs/mpl/doc/src/refmanual/abs.rst 2011-01-01 13:12:37 EST (Sat, 01 Jan 2011)
@@ -0,0 +1,114 @@
+.. Metafunctions/Arithmetic Operations//abs |70
+
+abs
+====
+
+Synopsis
+--------
+
+.. parsed-literal::
+
+ template<
+ typename T
+ >
+ struct abs
+ {
+ typedef |unspecified| type;
+ };
+
+
+
+Description
+-----------
+
+Returns the absolute value of its argument.
+
+
+Header
+------
+
+.. parsed-literal::
+
+ #include <boost/mpl/abs.hpp>
+ #include <boost/mpl/arithmetic.hpp>
+
+
+Model of
+--------
+
+|Numeric Metafunction|
+
+
+Parameters
+----------
+
++---------------+---------------------------+-----------------------------------------------+
+| Parameter | Requirement | Description |
++===============+===========================+===============================================+
+| ``T`` | |Integral Constant| | Operation's argument. |
++---------------+---------------------------+-----------------------------------------------+
+
+|Note:| |numeric metafunction note| |-- end note|
+
+
+Expression semantics
+--------------------
+
+For any |Integral Constant| ``c``:
+
+.. parsed-literal::
+
+ typedef abs<c>::type r;
+
+:Return type:
+ |Integral Constant|.
+
+:Semantics:
+ Equivalent to
+
+ .. parsed-literal::
+
+ typedef integral_c< c::value_type, ( (c::value<0)?(-c::value):(c::value) ) > r;
+
+.. ..........................................................................
+
+.. parsed-literal::
+
+ typedef abs<c> r;
+
+:Return type:
+ |Integral Constant|.
+
+:Semantics:
+ Equivalent to
+
+ .. parsed-literal::
+
+ struct r : abs<c>::type {};
+
+
+Complexity
+----------
+
+Amortized constant time.
+
+
+Example
+-------
+
+.. parsed-literal::
+
+ typedef abs< int_<-10> >::type r;
+ BOOST_MPL_ASSERT_RELATION( r::value, ==, 10 );
+ BOOST_MPL_ASSERT(( is_same< r::value_type, int > ));
+
+
+See also
+--------
+
+|Arithmetic Operations|, |Numeric Metafunction|, |numeric_cast|, |plus|, |minus|, |times|
+
+
+.. copyright:: Copyright © 2010 Vicente J. Botet Escriba
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Added: sandbox/chrono/libs/mpl/doc/src/refmanual/gcd.rst
==============================================================================
--- (empty file)
+++ sandbox/chrono/libs/mpl/doc/src/refmanual/gcd.rst 2011-01-01 13:12:37 EST (Sat, 01 Jan 2011)
@@ -0,0 +1,131 @@
+.. Metafunctions/Arithmetic Operations//gcd |90
+
+gcd
+====
+
+Synopsis
+--------
+
+.. parsed-literal::
+
+ template<
+ typename T1
+ , typename T2
+ , typename T3 = |unspecified|
+ |...|
+ , typename T\ *n* = |unspecified|
+ >
+ struct gcd
+ {
+ typedef |unspecified| type;
+ };
+
+
+
+Description
+-----------
+
+Returns the greatest common divisor (gcd) of its arguments.
+
+
+Header
+------
+
+.. parsed-literal::
+
+ #include <boost/mpl/gcd.hpp>
+ #include <boost/mpl/arithmetic.hpp>
+
+
+Model of
+--------
+
+|Numeric Metafunction|
+
+
+
+Parameters
+----------
+
++---------------+---------------------------+-----------------------------------------------+
+| Parameter | Requirement | Description |
++===============+===========================+===============================================+
+| |T1...Tn| | |Integral Constant| | Operation's arguments. |
++---------------+---------------------------+-----------------------------------------------+
+
+|Note:| |numeric metafunction note| |-- end note|
+
+
+Expression semantics
+--------------------
+
+For any |Integral Constant|\ s |c1...cn|:
+
+
+.. parsed-literal::
+
+ typedef gcd<c1,\ |...|\ c\ *n*\>::type r;
+
+:Return type:
+ |Integral Constant|.
+
+:Semantics:
+ Equivalent to
+
+ .. parsed-literal::
+
+ typedef
+ if_c<c1::value==0, c2,
+ if_c<c2::value==0, c1,
+ gcd<c2, integral_c<
+ typeof(c1::value % c2::value)
+ , ( c1::value % c2::value )>
+ >
+ > > c;
+
+ typedef gcd<c,c3,\ |...|\c\ *n*\>::type r;
+
+.. ..........................................................................
+
+.. parsed-literal::
+
+ typedef gcd<c1,\ |...|\ c\ *n*\> r;
+
+:Return type:
+ |Integral Constant|.
+
+:Semantics:
+ Equivalent to
+
+ .. parsed-literal::
+
+ struct r : gcd<c1,\ |...|\ c\ *n*\>::type {};
+
+
+
+
+Complexity
+----------
+
+Amortized constant time.
+
+
+Example
+-------
+
+.. parsed-literal::
+
+ typedef gcd< int_<10>, int_<4>, long_<6> >::type r;
+ BOOST_MPL_ASSERT_RELATION( r::value, ==, 2 );
+ BOOST_MPL_ASSERT(( is_same< r::value_type, long > ));
+
+
+See also
+--------
+
+|Arithmetic Operations|, |Numeric Metafunction|, |numeric_cast|, |divides|, |lcm|, |times|
+
+
+.. copyright:: Copyright © 2010 Vicente J. Botet Escriba
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Added: sandbox/chrono/libs/mpl/doc/src/refmanual/lcm.rst
==============================================================================
--- (empty file)
+++ sandbox/chrono/libs/mpl/doc/src/refmanual/lcm.rst 2011-01-01 13:12:37 EST (Sat, 01 Jan 2011)
@@ -0,0 +1,131 @@
+.. Metafunctions/Arithmetic Operations//lcm |100
+
+lcm
+====
+
+Synopsis
+--------
+
+.. parsed-literal::
+
+ template<
+ typename T1
+ , typename T2
+ , typename T3 = |unspecified|
+ |...|
+ , typename T\ *n* = |unspecified|
+ >
+ struct lcm
+ {
+ typedef |unspecified| type;
+ };
+
+
+
+Description
+-----------
+
+Returns the least common multiple (lcm) of its arguments.
+
+
+Header
+------
+
+.. parsed-literal::
+
+ #include <boost/mpl/lcm.hpp>
+ #include <boost/mpl/arithmetic.hpp>
+
+
+Model of
+--------
+
+|Numeric Metafunction|
+
+
+
+Parameters
+----------
+
++---------------+---------------------------+-----------------------------------------------+
+| Parameter | Requirement | Description |
++===============+===========================+===============================================+
+| |T1...Tn| | |Integral Constant| | Operation's arguments. |
++---------------+---------------------------+-----------------------------------------------+
+
+|Note:| |numeric metafunction note| |-- end note|
+
+
+Expression semantics
+--------------------
+
+For any |Integral Constant|\ s |c1...cn|:
+
+
+.. parsed-literal::
+
+ typedef lcm<c1,\ |...|\ c\ *n*\>::type r;
+
+:Return type:
+ |Integral Constant|.
+
+:Semantics:
+ Equivalent to
+
+ .. parsed-literal::
+
+ typedef
+ if_c<c1::value==0, c1,
+ if_c<c2::value==0, c2,
+ integral_c<
+ typeof(c1::value / gcd<c1::value, c2::value>::value * c2)
+ , ( c1::value / gcd<c1, c2>::value * c2::value )
+ >
+ > > c;
+
+ typedef lcm<c,c3,\ |...|\c\ *n*\>::type r;
+
+.. ..........................................................................
+
+.. parsed-literal::
+
+ typedef lcm<c1,\ |...|\ c\ *n*\> r;
+
+:Return type:
+ |Integral Constant|.
+
+:Semantics:
+ Equivalent to
+
+ .. parsed-literal::
+
+ struct r : lcm<c1,\ |...|\ c\ *n*\>::type {};
+
+
+
+
+Complexity
+----------
+
+Amortized constant time.
+
+
+Example
+-------
+
+.. parsed-literal::
+
+ typedef lcm< int_<10>, int_<4>, long_<6> >::type r;
+ BOOST_MPL_ASSERT_RELATION( r::value, ==, 60 );
+ BOOST_MPL_ASSERT(( is_same< r::value_type, long > ));
+
+
+See also
+--------
+
+|Arithmetic Operations|, |Numeric Metafunction|, |numeric_cast|, |divides|, |gcd|, |times|
+
+
+.. copyright:: Copyright © 2010 Vicente J. Botet Escriba
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Added: sandbox/chrono/libs/mpl/doc/src/refmanual/sign.rst
==============================================================================
--- (empty file)
+++ sandbox/chrono/libs/mpl/doc/src/refmanual/sign.rst 2011-01-01 13:12:37 EST (Sat, 01 Jan 2011)
@@ -0,0 +1,114 @@
+.. Metafunctions/Arithmetic Operations//sign |80
+
+sign
+====
+
+Synopsis
+--------
+
+.. parsed-literal::
+
+ template<
+ typename T
+ >
+ struct sign
+ {
+ typedef |unspecified| type;
+ };
+
+
+
+Description
+-----------
+
+Returns the sign of its argument.
+
+
+Header
+------
+
+.. parsed-literal::
+
+ #include <boost/mpl/sign.hpp>
+ #include <boost/mpl/arithmetic.hpp>
+
+
+Model of
+--------
+
+|Numeric Metafunction|
+
+
+Parameters
+----------
+
++---------------+---------------------------+-----------------------------------------------+
+| Parameter | Requirement | Description |
++===============+===========================+===============================================+
+| ``T`` | |Integral Constant| | Operation's argument. |
++---------------+---------------------------+-----------------------------------------------+
+
+|Note:| |numeric metafunction note| |-- end note|
+
+
+Expression semantics
+--------------------
+
+For any |Integral Constant| ``c``:
+
+.. parsed-literal::
+
+ typedef sign<c>::type r;
+
+:Return type:
+ |Integral Constant|.
+
+:Semantics:
+ Equivalent to
+
+ .. parsed-literal::
+
+ typedef integral_c< c::value_type, ( (c::value<0)?-1:(0<c::value)?1:0 ) > r;
+
+.. ..........................................................................
+
+.. parsed-literal::
+
+ typedef sign<c> r;
+
+:Return type:
+ |Integral Constant|.
+
+:Semantics:
+ Equivalent to
+
+ .. parsed-literal::
+
+ struct r : sign<c>::type {};
+
+
+Complexity
+----------
+
+Amortized constant time.
+
+
+Example
+-------
+
+.. parsed-literal::
+
+ typedef sign< int_<-10> >::type r;
+ BOOST_MPL_ASSERT_RELATION( r::value, ==, -1 );
+ BOOST_MPL_ASSERT(( is_same< r::value_type, int > ));
+
+
+See also
+--------
+
+|Arithmetic Operations|, |Numeric Metafunction|, |numeric_cast|, |plus|, |minus|, |times|
+
+
+.. copyright:: Copyright © 2010 Vicente J. Botet Escriba
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Added: sandbox/chrono/libs/mpl/test/arithmetic.cpp
==============================================================================
--- (empty file)
+++ sandbox/chrono/libs/mpl/test/arithmetic.cpp 2011-01-01 13:12:37 EST (Sat, 01 Jan 2011)
@@ -0,0 +1,120 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: arithmetic.cpp 49240 2008-10-10 09:21:07Z agurtovoy $
+// $Date: 2008-10-10 11:21:07 +0200 (ven., 10 oct. 2008) $
+// $Revision: 49240 $
+
+#include <boost/mpl/arithmetic.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/aux_/test.hpp>
+
+MPL_TEST_CASE()
+{
+{
+ typedef int_<0> _0;
+ typedef int_<1> _1;
+ typedef int_<3> _3;
+ typedef int_<4> _4;
+ typedef int_<6> _6;
+ typedef int_<7> _7;
+ typedef int_<10> _10;
+ typedef int_<18> _18;
+ typedef int_<30> _30;
+ typedef int_<42> _42;
+ typedef int_<-1> m1;
+ typedef int_<-3> m3;
+ typedef int_<-6> m6;
+ typedef int_<-7> m7;
+ typedef int_<-9> m9;
+ typedef int_<-10> m10;
+
+ MPL_ASSERT_RELATION( (plus<_0,_10>::value), ==, 10 );
+ MPL_ASSERT_RELATION( (plus<_10,_0>::value), ==, 10 );
+
+ MPL_ASSERT_RELATION( (minus<_0,_10>::value), ==, -10 );
+ MPL_ASSERT_RELATION( (minus<_10,_0>::value), ==, 10 );
+
+ MPL_ASSERT_RELATION( (times<_1,_10>::value), ==, 10 );
+ MPL_ASSERT_RELATION( (times<_10,_1>::value), ==, 10 );
+ MPL_ASSERT_RELATION( (multiplies<_1,_10>::value), ==, 10 );
+ MPL_ASSERT_RELATION( (multiplies<_10,_1>::value), ==, 10 );
+
+ MPL_ASSERT_RELATION( (divides<_10,_1>::value), ==, 10 );
+ MPL_ASSERT_RELATION( (divides<_10,_1>::value), ==, 10 );
+
+ MPL_ASSERT_RELATION( (modulus<_10,_1>::value), ==, 0 );
+ MPL_ASSERT_RELATION( (modulus<_10,_3>::value), ==, 1 );
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ MPL_ASSERT_RELATION( (minus<_10,_1,_10>::value), ==, -1 );
+ MPL_ASSERT_RELATION( (plus<_10,_1,_10>::value), ==, 21 );
+ MPL_ASSERT_RELATION( (divides<_10,_1,_10>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (divides<_10,_1,_10>::value), ==, 1 );
+#endif
+
+ MPL_ASSERT_RELATION( negate<_10>::value, ==, -10 );
+
+ MPL_ASSERT_RELATION( abs<_10>::value, ==, 10 );
+ MPL_ASSERT_RELATION( abs<_0>::value, ==, 0 );
+ MPL_ASSERT_RELATION( abs<m10>::value, ==, 10 );
+
+ MPL_ASSERT_RELATION( sign<_10>::value, ==, 1 );
+ MPL_ASSERT_RELATION( sign<_0>::value, ==, 0 );
+ MPL_ASSERT_RELATION( sign<m10>::value, ==, -1 );
+
+ MPL_ASSERT_RELATION( (gcd<_1,m1>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (gcd<m1,_1>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (gcd<_1,_1>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (gcd<m1,m1>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (gcd<_0,_0>::value), ==, 0 );
+ MPL_ASSERT_RELATION( (gcd<_7,_0>::value), ==, 7 );
+ MPL_ASSERT_RELATION( (gcd<_0,_6>::value), ==, 6 );
+ MPL_ASSERT_RELATION( (gcd<m7,_0>::value), ==, 7 );
+ MPL_ASSERT_RELATION( (gcd<_0,m6>::value), ==, 6 );
+ MPL_ASSERT_RELATION( (gcd<_42,_30>::value), ==, 6 );
+ MPL_ASSERT_RELATION( (gcd<_6,m9>::value), ==, 3 );
+ MPL_ASSERT_RELATION( (gcd<m6,m6>::value), ==, 6 );
+ MPL_ASSERT_RELATION( (gcd<_3,_7>::value), ==, 1 );
+
+ MPL_ASSERT_RELATION( (lcm<_1,m1>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (lcm<m1,_1>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (lcm<_1,_1>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (lcm<m1,m1>::value), ==, 1 );
+ MPL_ASSERT_RELATION( (lcm<_0,_0>::value), ==, 0 );
+ MPL_ASSERT_RELATION( (lcm<_7,_0>::value), ==, 0 );
+ MPL_ASSERT_RELATION( (lcm<_0,_6>::value), ==, 0 );
+ MPL_ASSERT_RELATION( (lcm<m7,_0>::value), ==, 0 );
+ MPL_ASSERT_RELATION( (lcm<_0,m6>::value), ==, 0 );
+ MPL_ASSERT_RELATION( (lcm<_18,_30>::value), ==, 90 );
+ MPL_ASSERT_RELATION( (lcm<_6,m9>::value), ==, 18 );
+ MPL_ASSERT_RELATION( (lcm<m6,m6>::value), ==, 6 );
+ MPL_ASSERT_RELATION( (lcm<_3,_7>::value), ==, 21 );
+}
+{
+ typedef integral_c<unsigned int, 0u> ui0;
+ typedef long_<10> sl10;
+ typedef integral_c<unsigned int, 10u> ui10;
+
+ MPL_ASSERT_RELATION( (plus<ui0,sl10>::value), ==, 10 );
+
+ MPL_ASSERT_RELATION( abs<ui10>::value, ==, 10 );
+ MPL_ASSERT_RELATION( abs<ui0>::value, ==, 0 );
+
+ MPL_ASSERT_RELATION( sign<ui10>::value, ==, 1 );
+ MPL_ASSERT_RELATION( sign<ui0>::value, ==, 0 );
+
+ MPL_ASSERT_RELATION( (gcd<ui10,ui10>::value), ==, 10 );
+ MPL_ASSERT_RELATION( (gcd<ui10,sl10>::value), ==, 10 );
+
+ MPL_ASSERT_RELATION( (lcm<ui10,sl10>::value), ==, 10 );
+
+}
+}


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