$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r65443 - in trunk: boost/type_traits boost/type_traits/detail boost/utility libs/type_traits/doc libs/type_traits/doc/html libs/type_traits/doc/html/boost_typetraits libs/type_traits/doc/html/boost_typetraits/category libs/type_traits/doc/html/boost_typetraits/examples libs/type_traits/doc/html/boost_typetraits/reference libs/type_traits/test libs/utility libs/utility/doc libs/utility/doc/html
From: john_at_[hidden]
Date: 2010-09-17 08:12:21
Author: johnmaddock
Date: 2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
New Revision: 65443
URL: http://svn.boost.org/trac/boost/changeset/65443
Log:
Add declval and common type from Vicente J. Botet Escriba.
Regenerate docs.
Added:
   trunk/boost/type_traits/common_type.hpp   (contents, props changed)
   trunk/boost/type_traits/detail/common_type_imp.hpp   (contents, props changed)
   trunk/boost/utility/declval.hpp   (contents, props changed)
   trunk/libs/type_traits/doc/common_type.qbk   (contents, props changed)
   trunk/libs/type_traits/doc/html/boost_typetraits/examples/improved_min.html   (contents, props changed)
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_lvalue_reference.html   (contents, props changed)
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_rvalue_reference.html   (contents, props changed)
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/common_type.html   (contents, props changed)
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/common_type_hpp.html   (contents, props changed)
   trunk/libs/type_traits/test/alignment_of_a2_test.cpp   (contents, props changed)
   trunk/libs/type_traits/test/common_type_fail.cpp   (contents, props changed)
   trunk/libs/type_traits/test/common_type_test.cpp   (contents, props changed)
   trunk/libs/utility/doc/
   trunk/libs/utility/doc/Jamfile.v2   (contents, props changed)
   trunk/libs/utility/doc/declval.qbk   (contents, props changed)
   trunk/libs/utility/doc/html/
   trunk/libs/utility/doc/html/declval.html   (contents, props changed)
Removed:
   trunk/libs/type_traits/test/alignment_of_test_a2.cpp
Text files modified: 
   trunk/libs/type_traits/doc/examples.qbk                                                  |    17 +++++++++++++++++                       
   trunk/libs/type_traits/doc/html/boost_typetraits/background.html                         |    22 +++++++++++-----------                  
   trunk/libs/type_traits/doc/html/boost_typetraits/category/transform.html                 |     5 ++++-                                   
   trunk/libs/type_traits/doc/html/boost_typetraits/examples.html                           |     2 ++                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/examples/to_double.html                 |     6 +++---                                  
   trunk/libs/type_traits/doc/html/boost_typetraits/history.html                            |     4 ++--                                    
   trunk/libs/type_traits/doc/html/boost_typetraits/intrinsics.html                         |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference.html                          |     9 ++++++---                               
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_const.html                |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_cv.html                   |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_pointer.html              |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_reference.html            |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_volatile.html             |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/alignment_of.html             |     6 +++---                                  
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/decay.html                    |     8 ++++----                                
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/floating_point_promotion.html |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/function_traits.html          |     4 ++--                                    
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/integral_promotion.html       |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/make_signed.html              |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/make_unsigned.html            |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/promote.html                  |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_all_extents.html       |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_const.html             |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_cv.html                |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_extent.html            |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_pointer.html           |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_reference.html         |     2 +-                                      
   trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_volatile.html          |     2 +-                                      
   trunk/libs/type_traits/doc/html/index.html                                               |     7 +++++--                                 
   trunk/libs/type_traits/doc/transform_traits.qbk                                          |     3 +++                                     
   trunk/libs/type_traits/doc/type_traits.qbk                                               |     2 ++                                      
   trunk/libs/type_traits/test/Jamfile.v2                                                   |     2 ++                                      
   trunk/libs/utility/index.html                                                            |     6 ++++--                                  
   33 files changed, 88 insertions(+), 51 deletions(-)
Added: trunk/boost/type_traits/common_type.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/type_traits/common_type.hpp	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,150 @@
+//  common_type.hpp  ---------------------------------------------------------//
+
+//  Copyright 2008 Howard Hinnant
+//  Copyright 2008 Beman Dawes
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
+#define BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
+
+#include <boost/config.hpp>
+
+#ifdef __SUNPRO_CC
+#  define BOOST_COMMON_TYPE_DONT_USE_TYPEOF
+#endif
+
+//----------------------------------------------------------------------------//
+#if defined(BOOST_NO_VARIADIC_TEMPLATES)
+#define BOOST_COMMON_TYPE_ARITY 3
+#endif
+
+//----------------------------------------------------------------------------//
+#if defined(BOOST_NO_DECLTYPE) && !defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
+#define BOOST_TYPEOF_SILENT
+#include <boost/typeof/typeof.hpp>   // boost wonders never cease!
+#endif
+
+//----------------------------------------------------------------------------//
+#ifndef BOOST_NO_STATIC_ASSERT
+#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES) static_assert(CND,MSG)
+#elif defined(BOOST_COMMON_TYPE_USES_MPL_ASSERT)
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES)                                 \
+    BOOST_MPL_ASSERT_MSG(boost::mpl::bool_< (CND) >::type::value, MSG, TYPES)
+#else
+#include <boost/static_assert.hpp>
+#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES) BOOST_STATIC_ASSERT(CND)
+#endif
+
+#if !defined(BOOST_NO_STATIC_ASSERT) || !defined(BOOST_COMMON_TYPE_USES_MPL_ASSERT)
+#define BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE "must be complete type"
+#endif
+
+#if defined(BOOST_NO_DECLTYPE) && defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
+#include <boost/type_traits/detail/common_type_imp.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#endif
+#include <boost/mpl/if.hpp>
+//#include <boost/type_traits/declval.hpp>
+#include <boost/type_traits/add_rvalue_reference.hpp>
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                           C++03 implementation of                          //
+//             20.6.7 Other transformations [meta.trans.other]                //
+//                          Written by Howard Hinnant                         //
+//      Adapted for Boost by Beman Dawes, Vicente Botet and  Jeffrey Hellrung //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+namespace boost {
+
+// prototype
+#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
+    template<typename... T>
+    struct common_type;
+#else // or no specialization
+    template <class T, class U = void, class V = void>
+    struct common_type
+    {
+    public:
+        typedef typename common_type<typename common_type<T, U>::type, V>::type type;
+    };
+#endif
+
+
+// 1 arg
+    template<typename T>
+#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
+    struct common_type<T>
+#else
+    struct common_type<T, void, void>
+
+#endif
+    {
+        BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(T) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (T));
+    public:
+        typedef T type;
+    };
+
+// 2 args
+namespace type_traits_detail {
+
+    template <class T, class U>
+    struct common_type_2
+    {
+    private:
+        BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(T) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (T));
+        BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(U) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (U));
+        static bool declval_bool();  // workaround gcc bug; not required by std
+        static typename add_rvalue_reference<T>::type declval_T();  // workaround gcc bug; not required by std
+        static typename add_rvalue_reference<U>::type declval_U();  // workaround gcc bug; not required by std
+        static typename add_rvalue_reference<bool>::type declval_b();  
+
+#if !defined(BOOST_NO_DECLTYPE)
+    public:
+        typedef decltype(declval<bool>() ? declval<T>() : declval<U>()) type;
+#elif defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
+    public:
+    typedef typename detail_type_traits_common_type::common_type_impl<
+          typename remove_cv<T>::type,
+          typename remove_cv<U>::type
+      >::type type;
+#else
+    public:
+        typedef BOOST_TYPEOF_TPL(declval_b() ? declval_T() : declval_U()) type;
+#endif
+    };
+
+    template <class T>
+    struct common_type_2<T, T>
+    {
+        typedef T type;
+    };
+    }
+
+#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
+    template <class T, class U>
+    struct common_type<T, U>
+#else
+    template <class T, class U>
+    struct common_type<T, U, void>
+#endif
+    : type_traits_detail::common_type_2<T,U>
+    { };
+
+
+// 3 or more args
+#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
+    template<typename T, typename U, typename... V>
+    struct common_type<T, U, V...> {
+    public:
+        typedef typename common_type<typename common_type<T, U>::type, V...>::type type;
+    };
+#endif
+}  // namespace boost
+
+#endif  // BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
Added: trunk/boost/type_traits/detail/common_type_imp.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/type_traits/detail/common_type_imp.hpp	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,304 @@
+/*******************************************************************************
+ * boost/type_traits/detail/common_type_imp.hpp
+ *
+ * Copyright 2010, Jeffrey Hellrung.
+ * 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)
+ *
+ * struct boost::common_type<T,U>
+ *
+ * common_type<T,U>::type is the type of the expression
+ *     b() ? x() : y()
+ * where b() returns a bool, x() has return type T, and y() has return type U.
+ * See
+ *     http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm#common_type
+ *
+ * Note that this evaluates to void if one or both of T and U is void.
+ ******************************************************************************/
+
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMP_HPP
+#define BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMP_HPP
+
+#include <cstddef>
+
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/contains.hpp>
+#include <boost/mpl/copy.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/inserter.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/vector/vector0.hpp>
+#include <boost/mpl/vector/vector10.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/make_signed.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/declval.hpp>
+
+namespace boost
+{
+
+namespace detail_type_traits_common_type
+{
+
+/*******************************************************************************
+ * struct propagate_cv< From, To >
+ *
+ * This metafunction propagates cv-qualifiers on type From to type To.
+ ******************************************************************************/
+
+template< class From, class To >
+struct propagate_cv
+{ typedef To type; };
+template< class From, class To >
+struct propagate_cv< const From, To >
+{ typedef To const type; };
+template< class From, class To >
+struct propagate_cv< volatile From, To >
+{ typedef To volatile type; };
+template< class From, class To >
+struct propagate_cv< const volatile From, To >
+{ typedef To const volatile type; };
+
+/*******************************************************************************
+ * struct is_signable_integral<T>
+ *
+ * This metafunction determines if T is an integral type which can be made
+ * signed or unsigned.
+ ******************************************************************************/
+
+template< class T >
+struct is_signable_integral
+    : mpl::or_< is_integral<T>, is_enum<T> >
+{ };
+template<>
+struct is_signable_integral< bool >
+    : false_type
+{ };
+
+/*******************************************************************************
+ * struct sizeof_t<N>
+ * typedef ... yes_type
+ * typedef ... no_type
+ *
+ * These types are integral players in the use of the "sizeof trick", i.e., we
+ * can distinguish overload selection by inspecting the size of the return type
+ * of the overload.
+ ******************************************************************************/
+
+template< std::size_t N > struct sizeof_t { char _dummy[N]; };
+typedef sizeof_t<1> yes_type;
+typedef sizeof_t<2> no_type;
+BOOST_MPL_ASSERT_RELATION( sizeof( yes_type ), ==, 1 );
+BOOST_MPL_ASSERT_RELATION( sizeof( no_type ), ==, 2 );
+
+/*******************************************************************************
+ * rvalue_test(T&) -> no_type
+ * rvalue_test(...) -> yes_type
+ *
+ * These overloads are used to determine the rvalue-ness of an expression.
+ ******************************************************************************/
+
+template< class T > no_type rvalue_test(T&);
+yes_type rvalue_test(...);
+
+/*******************************************************************************
+ * struct conversion_test_overloads< Sequence >
+ *
+ * This struct has multiple overloads of the static member function apply, each
+ * one taking a single parameter of a type within the Boost.MPL sequence
+ * Sequence.  Each such apply overload has a return type with sizeof equal to
+ * one plus the index of the parameter type within Sequence.  Thus, we can
+ * deduce the type T of an expression as long as we can generate a finite set of
+ * candidate types containing T via these apply overloads and the "sizeof
+ * trick".
+ ******************************************************************************/
+
+template< class First, class Last, std::size_t Index >
+struct conversion_test_overloads_iterate
+    : conversion_test_overloads_iterate<
+          typename mpl::next< First >::type, Last, Index + 1
+      >
+{
+    using conversion_test_overloads_iterate<
+        typename mpl::next< First >::type, Last, Index + 1
+    >::apply;
+    static sizeof_t< Index + 1 >
+    apply(typename mpl::deref< First >::type);
+};
+
+template< class Last, std::size_t Index >
+struct conversion_test_overloads_iterate< Last, Last, Index >
+{ static sizeof_t< Index + 1 > apply(...); };
+
+template< class Sequence >
+struct conversion_test_overloads
+    : conversion_test_overloads_iterate<
+          typename mpl::begin< Sequence >::type,
+          typename mpl::end< Sequence >::type,
+          0
+      >
+{ };
+
+/*******************************************************************************
+ * struct select< Sequence, Index >
+ *
+ * select is synonymous with mpl::at_c unless Index equals the size of the
+ * Boost.MPL Sequence, in which case this evaluates to void.
+ ******************************************************************************/
+
+template<
+    class Sequence, int Index,
+    int N = mpl::size< Sequence >::value
+>
+struct select
+    : mpl::at_c< Sequence, Index >
+{ };
+template< class Sequence, int N >
+struct select< Sequence, N, N >
+{ typedef void type; };
+
+/*******************************************************************************
+ * class deduce_common_type< T, U, NominalCandidates >
+ * struct nominal_candidates<T,U>
+ * struct common_type_dispatch_on_rvalueness<T,U>
+ * struct common_type_impl<T,U>
+ *
+ * These classes and structs implement the logic behind common_type, which goes
+ * roughly as follows.  Let C be the type of the conditional expression
+ *     declval< bool >() ? declval<T>() : declval<U>()
+ * if C is an rvalue, then:
+ *     let T' and U' be T and U stripped of reference- and cv-qualifiers
+ *     if T' and U' are pointer types, say, T' = V* and U' = W*, then:
+ *         define the set of NominalCandidates to be
+ *             { V*, W*, V'*, W'* }
+ *           where V' is V with whatever cv-qualifiers are on W, and W' is W
+ *           with whatever cv-qualifiers are on V
+ *     else T' and U' are both "signable integral types" (integral and enum
+ *       types excepting bool), then:
+ *         define the set of NominalCandidates to be
+ *             { unsigned(T'), unsigned(U'), signed(T'), signed(U') }
+ *           where unsigned(X) is make_unsigned<X>::type and signed(X) is
+ *           make_signed<X>::type
+ *     else
+ *         define the set of NominalCandidates to be
+ *             { T', U' }
+ * else
+ *     let V and W be T and U stripped of reference-qualifiers
+ *     define the set of NominalCandidates to be
+ *         { V&, W&, V'&, W'& }
+ *     where V' is V with whatever cv-qualifiers are on W, and W' is W with
+ *       whatever cv-qualifiers are on V
+ * define the set of Candidates to be equal to the set of NominalCandidates with
+ * duplicates removed, and use this set of Candidates to determine C using the
+ * conversion_test_overloads struct
+ ******************************************************************************/
+
+template< class T, class U, class NominalCandidates >
+class deduce_common_type
+{
+    typedef typename mpl::copy<
+        NominalCandidates,
+        mpl::inserter<
+            mpl::vector0<>,
+            mpl::if_<
+                mpl::contains< mpl::_1, mpl::_2 >,
+                mpl::_1,
+                mpl::push_back< mpl::_1, mpl::_2 >
+            >
+        >
+    >::type candidate_types;
+    static const int best_candidate_index =
+        sizeof( conversion_test_overloads< candidate_types >::apply(
+            declval< bool >() ? declval<T>() : declval<U>()
+        ) ) - 1;
+public:
+    typedef typename select< candidate_types, best_candidate_index >::type type;
+};
+
+template<
+    class T, class U,
+    class V = typename remove_cv< typename remove_reference<T>::type >::type,
+    class W = typename remove_cv< typename remove_reference<U>::type >::type,
+    bool = is_signable_integral<V>::value && is_signable_integral<W>::value
+>
+struct nominal_candidates;
+
+template< class T, class U, class V, class W >
+struct nominal_candidates< T, U, V, W, false >
+{ typedef mpl::vector2<V,W> type; };
+
+template< class T, class U, class V, class W >
+struct nominal_candidates< T, U, V, W, true >
+{
+    typedef mpl::vector4<
+        typename make_unsigned<V>::type,
+        typename make_unsigned<W>::type,
+        typename make_signed<V>::type,
+        typename make_signed<W>::type
+    > type;
+};
+
+template< class T, class U, class V, class W >
+struct nominal_candidates< T, U, V*, W*, false >
+{
+    typedef mpl::vector4<
+        V*, W*,
+        typename propagate_cv<W,V>::type *,
+        typename propagate_cv<V,W>::type *
+    > type;
+};
+
+template<class T, class U, bool b>
+struct common_type_dispatch_on_rvalueness;
+
+template< class T, class U >
+struct common_type_dispatch_on_rvalueness< T, U, true >
+    : deduce_common_type< T, U, typename nominal_candidates<T,U>::type >
+{ };
+
+template< class T, class U >
+struct common_type_dispatch_on_rvalueness< T, U, false >
+{
+private:
+    typedef typename remove_reference<T>::type unrefed_T_type;
+    typedef typename remove_reference<U>::type unrefed_U_type;
+public:
+    typedef typename deduce_common_type<
+        T, U,
+        mpl::vector4<
+            unrefed_T_type &,
+            unrefed_U_type &,
+            typename propagate_cv< unrefed_U_type, unrefed_T_type >::type &,
+            typename propagate_cv< unrefed_T_type, unrefed_U_type >::type &
+        >
+    >::type type;
+};
+
+template< class T, class U >
+struct common_type_impl
+    : common_type_dispatch_on_rvalueness<T,U, sizeof( ::boost::detail_type_traits_common_type::rvalue_test(
+        declval< bool >() ? declval<T>() : declval<U>() ) ) == sizeof( yes_type ) >
+{ };
+
+template< class T > struct common_type_impl< T, void > { typedef void type; };
+template< class T > struct common_type_impl< void, T > { typedef void type; };
+template<> struct common_type_impl< void, void > { typedef void type; };
+
+} // namespace detail_type_traits_common_type
+
+
+} // namespace boost
+
+#endif // BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_HPP
Added: trunk/boost/utility/declval.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/utility/declval.hpp	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,44 @@
+//  common_type.hpp  ---------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
+#define BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
+
+#include <boost/config.hpp>
+
+//----------------------------------------------------------------------------//
+
+#include <boost/type_traits/add_rvalue_reference.hpp>
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                           C++03 implementation of                          //
+//                          Written by Vicente J. Botet Escriba               //
+//~ 20.3.4 Function template declval [declval]
+//~ 1 The library provides the function template declval to simplify the definition of expressions which occur as
+//~ unevaluated operands.
+//~ 2 Remarks: If this function is used, the program is ill-formed.
+//~ 3 Remarks: The template parameter T of declval may be an incomplete type.
+//~ [ Example:
+
+//~ template <class To, class From>
+//~ decltype(static_cast<To>(declval<From>())) convert(From&&);
+
+//~ declares a function template convert which only participats in overloading if the type From can be
+//~ explicitly converted to type To. For another example see class template common_type (20.7.6.6). end
+//~ example ]
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+namespace boost {
+
+    template <typename T>
+    typename add_rvalue_reference<T>::type declval(); //noexcept; // as unevaluated operand
+
+}  // namespace boost
+
+#endif  // BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
Added: trunk/libs/type_traits/doc/common_type.qbk
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/doc/common_type.qbk	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,219 @@
+
+[/===================================================================]
+[section:common_type common_type]
+[/===================================================================]
+
+[def __declval [@../../../utility/doc/html/declval.html declval]]
+
+
+`#include <boost/type_traits/common_type.hpp>`
+
+    namespace boost {
+      template <class ...T>  struct __common_type;
+    }
+
+
+__common_type is a traits class used to deduce a type common to a several types, useful as the return type of functions 
+operating on multiple input types such as in mixed-mode arithmetic..
+
+The nested typedef `::type` could be defined as follows:
+
+    template <class ...T>
+    struct common_type;
+    
+    template <class T, class U, class ...V>
+    struct common_type<T,U,...V> {
+        typedef typename __common_type<typename __common_type<T, U>::type, V...>::type type;
+    };
+
+    template <class T>
+    struct common_type<T> {
+        typedef T type;
+    };
+
+    template <class T, class U>
+    struct common_type<T, U> {
+        typedef decltype(__declval<bool>() ? __declval<T>() : __declval<U>()) type;
+    };
+
+All parameter types must be complete. This trait is permitted to be specialized by a user if at least one 
+template parameter is a user-defined type. [*Note:] Such specializations are required when only explicit conversions 
+are desired among the __common_type arguments.
+
+Note that when the compiler does not support variadic templates (and the macro BOOST_NO_VARIADIC_TEMPLATES is defined)
+then the maximum number of template arguments is 3.
+
+
+[h4 Configuration macros]
+
+When the compiler does not support static assertions then the user can select the way static assertions are reported. Define
+
+* BOOST_COMMON_TYPE_USES_STATIC_ASSERT: define it if you want to use Boost.StaticAssert
+* BOOST_COMMON_TYPE_USES_MPL_ASSERT: define it if you want to use Boost.MPL static asertions
+
+The default behavior is to use mpl assertions in this case, but setting BOOST_COMMON_TYPE_USES_STATIC_ASSERT may reduce
+compile times and header dependencies somewhat.
+
+Depending on the static assertion used you will have an hint of the failing assertion either through the symbol or through the text.
+
+When possible common_type is implemented using `decltype`. Otherwise when BOOST_COMMON_TYPE_DONT_USE_TYPEOF is not defined 
+it uses Boost.TypeOf.
+
+[h4 Tutorial]
+
+In a nutshell, __common_type is a trait that takes 1 or more types, and returns a type which 
+all of the types will convert to. The default definition demands this conversion be implicit. 
+However the trait can be specialized for user-defined types which want to limit their inter-type conversions to explicit, 
+and yet still want to interoperate with the __common_type facility.
+
+[*Example:]
+
+    template <class T, class U>
+    complex<typename __common_type<T, U>::type>
+    operator+(complex<T>, complex<U>);
+
+
+In the above example, "mixed-mode" complex arithmetic is allowed. The return type is described by __common_type. 
+For example the resulting type of adding a `complex<float>` and `complex<double>` might be a `complex<double>`. 
+
+Here is how someone might produce a variadic comparison function:
+
+    template <class ...T>
+    typename __common_type<T...>::type
+    min(T... t);
+
+This is a very useful and broadly applicable utility. 
+
+[h4 How to get the common type of types with explicit conversions?]
+
+Another choice for the author of the preceding operator could be
+
+    template <class T, class U>
+    typename __common_type<complex<T>, complex<U> >::type
+    operator+(complex<T>, complex<U>);
+
+As the default definition of __common_type demands the conversion be implicit, we need to specialize the trait for complex types as follows.
+
+    template <class T, class U>
+    struct __common_type<complex<T>, complex<U> > {
+        typedef complex< __common_type<T, U> > type;
+    };
+
+[h4 How important is the order of the common_type<> template arguments?]
+
+The order of the template parameters is important. 
+
+`common_type<A,B,C>::type` is not equivalent to `common_type<C,A,B>::type`, but to `common_type<common_type<A,B>::type, C>::type`.
+
+Consider
+
+    struct A {};
+    struct B {};
+    struct C {
+        C() {}
+        C(A const&) {}
+        C(B const&) {}
+        C& operator=(C const&) {
+            return *this;
+        }
+    };
+
+The following doesn't compile
+
+    typedef boost::common_type<A, B, C>::type ABC; // Does not compile
+
+while 
+
+    typedef boost::common_type<C, A, B>::type ABC;
+
+compiles.
+
+Thus, as `common_type<A,B>::type` is undefined,  `common_type<A,B,C>::type` is also undefined.
+
+It is intended that clients who wish for `common_type<A, B>` to be well
+defined to define it themselves:
+
+    namespace boost
+    {
+
+    template <>
+    struct common_type<A, B> {typedef C type;};
+
+    } 
+
+Now this client can ask for `common_type<A, B, C>` (and get
+the same answer).
+
+Clients wanting to ask `common_type<A, B, C>` in any order and get the same result need to add in addition:
+
+    namespace boost
+    {
+
+    template <> struct common_type<B, A>
+    : public common_type<A, B> {};
+
+    } 
+
+This is needed as the specialization of `common_type<A, B>` is not be used implicitly for `common_type<B, A>`.
+
+[h4 Can the common_type of two types be a third type?]
+
+Given the preceding example, one might expect `common_type<A,B>::type` to be `C` without any intervention from the user. 
+But the default `common_type<>` implementation doesn't grant that. It is intended that clients who wish for `common_type<A, B>` 
+to be well defined to define it themselves:
+
+    namespace boost
+    {
+
+    template <>
+    struct common_type<A, B> {typedef C type;};
+
+    template <> struct common_type<B, A>
+    : public common_type<A, B> {};
+
+    } 
+
+Now this client can ask for `common_type<A, B>`.
+
+[h4 How common_type behaves with pointers?]
+
+Consider
+
+    struct C { }:
+    struct B : C { };
+    struct A : C { };
+
+
+Shouldn't `common_type<A*,B*>::type` be `C*`? I would say yes, but the default implementation will make it ill-formed.
+
+The library could add a specialization for pointers, as
+
+    namespace boost
+    {
+
+        template <typename A, typename B>
+        struct common_type<A*, B*> {
+            typedef common_type<A, B>* type;
+        };
+    }
+    
+But in the absence of a motivating use cases, we prefer not to add more than the standard specifies. 
+
+Of course the user can always make this specialization.
+
+[h4 Can you explain the pros/cons of common_type against Boost.Typeof?]
+
+Even if they appear to be close, `__common_type` and `typeof` have
+different purposes. You use `typeof` to get the type of an expression, while
+you use __common_type to set explicitly the type returned of a template
+function. Both are complementary, and indeed __common_type is equivalent to 
+`decltype(__declval<bool>() ? __declval<T>() : __declval<U>())` 
+
+__common_type is also similar to promote_args<class ...T> in boost/math/tools/promotion.hpp, 
+though it is not exactly the same as promote_args either.  __common_type<T1, T2>::type simply represents the result of some 
+operation on T1 and T2, and defaults to the type obtained by putting T1 and T2 into a conditional statement.
+
+It is meant to be customizable (via specialization) if this default is not appropriate.
+
+[endsect]
+
Modified: trunk/libs/type_traits/doc/examples.qbk
==============================================================================
--- trunk/libs/type_traits/doc/examples.qbk	(original)
+++ trunk/libs/type_traits/doc/examples.qbk	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -216,5 +216,22 @@
 
 [endsect]
 
+[section:improved_min Improving std::min with common_type]
+
+An improved `std::min` function could be written like this:
+
+   template <class T, class U>
+   typename __common_type<T, U>::type min(T t, T u)
+   {
+      return t < u ? t : u;
+   }
+
+And now expressions such as:
+
+   min(1, 2.0)
+
+will actually compile and return the correct type!
+
+[endsect]
 [endsect]
 
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/background.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/background.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/background.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -56,7 +56,7 @@
       method available to them.
     </p>
 <a name="boost_typetraits.background.type_traits"></a><h5>
-<a name="id1038712"></a>
+<a name="id902179"></a>
       <a class="link" href="background.html#boost_typetraits.background.type_traits">Type Traits</a>
     </h5>
 <p>
@@ -84,7 +84,7 @@
       given.
     </p>
 <a name="boost_typetraits.background.implementation"></a><h5>
-<a name="id1038776"></a>
+<a name="id902243"></a>
       <a class="link" href="background.html#boost_typetraits.background.implementation">Implementation</a>
     </h5>
 <p>
@@ -174,7 +174,7 @@
       in the default template.
     </p>
 <a name="boost_typetraits.background.optimized_copy"></a><h5>
-<a name="id1039513"></a>
+<a name="id902979"></a>
       <a class="link" href="background.html#boost_typetraits.background.optimized_copy">Optimized copy</a>
     </h5>
 <p>
@@ -247,7 +247,7 @@
       otherwise it will call the "slow but safe version".
     </p>
 <a name="boost_typetraits.background.was_it_worth_it_"></a><h5>
-<a name="id1044863"></a>
+<a name="id908330"></a>
       <a class="link" href="background.html#boost_typetraits.background.was_it_worth_it_">Was it worth it?</a>
     </h5>
 <p>
@@ -280,7 +280,7 @@
         </li>
 </ul></div>
 <div class="table">
-<a name="id1044907"></a><p class="title"><b>Table 1.1. Time taken to copy 1000 elements using `copy<const T*, T*>` (times
+<a name="id908374"></a><p class="title"><b>Table 1.1. Time taken to copy 1000 elements using `copy<const T*, T*>` (times
       in micro-seconds)</b></p>
 <div class="table-contents"><table class="table" summary="Time taken to copy 1000 elements using `copy<const T*, T*>` (times
       in micro-seconds)">
@@ -379,7 +379,7 @@
 </table></div>
 </div>
 <br class="table-break"><a name="boost_typetraits.background.pair_of_references"></a><h5>
-<a name="id1045057"></a>
+<a name="id908524"></a>
       <a class="link" href="background.html#boost_typetraits.background.pair_of_references">Pair of References</a>
     </h5>
 <p>
@@ -416,7 +416,7 @@
       to hold non-reference types, references, and constant references:
     </p>
 <div class="table">
-<a name="id1045319"></a><p class="title"><b>Table 1.2. Required Constructor Argument Types</b></p>
+<a name="id908786"></a><p class="title"><b>Table 1.2. Required Constructor Argument Types</b></p>
 <div class="table-contents"><table class="table" summary="Required Constructor Argument Types">
 <colgroup>
 <col>
@@ -481,7 +481,7 @@
       adds a reference to its type, unless it is already a reference.
     </p>
 <div class="table">
-<a name="id1045427"></a><p class="title"><b>Table 1.3. Using add_reference to synthesize the correct constructor type</b></p>
+<a name="id908894"></a><p class="title"><b>Table 1.3. Using add_reference to synthesize the correct constructor type</b></p>
 <div class="table-contents"><table class="table" summary="Using add_reference to synthesize the correct constructor type">
 <colgroup>
 <col>
@@ -597,7 +597,7 @@
       easier to maintain and easier to understand.
     </p>
 <a name="boost_typetraits.background.conclusion"></a><h5>
-<a name="id1045896"></a>
+<a name="id909363"></a>
       <a class="link" href="background.html#boost_typetraits.background.conclusion">Conclusion</a>
     </h5>
 <p>
@@ -610,7 +610,7 @@
       can be optimal as well as generic.
     </p>
 <a name="boost_typetraits.background.acknowledgements"></a><h5>
-<a name="id1045913"></a>
+<a name="id909380"></a>
       <a class="link" href="background.html#boost_typetraits.background.acknowledgements">Acknowledgements</a>
     </h5>
 <p>
@@ -618,7 +618,7 @@
       comments when preparing this article.
     </p>
 <a name="background.references"></a><a name="boost_typetraits.background.references"></a><h5>
-<a name="id1045933"></a>
+<a name="id909400"></a>
       <a class="link" href="background.html#boost_typetraits.background.references">References</a>
     </h5>
 <div class="orderedlist"><ol type="1">
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/category/transform.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/category/transform.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/category/transform.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -57,6 +57,9 @@
 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
 <span class="keyword">struct</span> <a class="link" href="../reference/add_volatile.html" title="add_volatile">add_volatile</a><span class="special">;</span>
 
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">T</span><span class="special">></span>
+<span class="keyword">struct</span> <a class="link" href="../reference/common_type.html" title="common_type">common_type</a><span class="special">;</span>
+
 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
 <span class="keyword">struct</span> <a class="link" href="../reference/decay.html" title="decay">decay</a><span class="special">;</span>
 
@@ -97,7 +100,7 @@
 <span class="keyword">struct</span> <a class="link" href="../reference/remove_volatile.html" title="remove_volatile">remove_volatile</a><span class="special">;</span>
 </pre>
 <a name="boost_typetraits.category.transform.broken_compiler_workarounds_"></a><h5>
-<a name="id1049903"></a>
+<a name="id913408"></a>
         <a class="link" href="transform.html#boost_typetraits.category.transform.broken_compiler_workarounds_">Broken
         Compiler Workarounds:</a>
       </h5>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/examples.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/examples.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/examples.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -37,6 +37,8 @@
       of std::iter_swap</a></span></dt>
 <dt><span class="section"><a href="examples/to_double.html"> Convert Numeric
       Types and Enums to double</a></span></dt>
+<dt><span class="section"><a href="examples/improved_min.html"> Improving std::min
+      with common_type</a></span></dt>
 </dl></div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
Added: trunk/libs/type_traits/doc/html/boost_typetraits/examples/improved_min.html
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/examples/improved_min.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,64 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Improving std::min with common_type</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
+<link rel="home" href="../../index.html" title="Chapter 1. Boost.TypeTraits">
+<link rel="up" href="../examples.html" title="Examples">
+<link rel="prev" href="to_double.html" title="Convert Numeric Types and Enums to double">
+<link rel="next" href="../reference.html" title="Alphabetical Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="to_double.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_typetraits.examples.improved_min"></a><a class="link" href="improved_min.html" title="Improving std::min with common_type"> Improving std::min
+      with common_type</a>
+</h3></div></div></div>
+<p>
+        An improved <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">min</span></code> function could be written like this:
+      </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span>
+<span class="keyword">typename</span> <a class="link" href="../reference/common_type.html" title="common_type">common_type</a><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">min</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">u</span><span class="special">)</span>
+<span class="special">{</span>
+   <span class="keyword">return</span> <span class="identifier">t</span> <span class="special"><</span> <span class="identifier">u</span> <span class="special">?</span> <span class="identifier">t</span> <span class="special">:</span> <span class="identifier">u</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        And now expressions such as:
+      </p>
+<pre class="programlisting"><span class="identifier">min</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2.0</span><span class="special">)</span>
+</pre>
+<p>
+        will actually compile and return the correct type!
+      </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2000, 2006 Adobe Systems Inc, David Abrahams,
+      Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant, Jesse Jones, Mat
+      Marcus, Itay Maman, John Maddock, Alexander Nasonov, Thorsten Ottosen, Robert
+      Ramey and Jeremy Siek<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="to_double.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/examples/to_double.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/examples/to_double.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/examples/to_double.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -7,7 +7,7 @@
 <link rel="home" href="../../index.html" title="Chapter 1. Boost.TypeTraits">
 <link rel="up" href="../examples.html" title="Examples">
 <link rel="prev" href="iter.html" title="An improved Version of std::iter_swap">
-<link rel="next" href="../reference.html" title="Alphabetical Reference">
+<link rel="next" href="improved_min.html" title="Improving std::min with common_type">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="iter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="iter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="improved_min.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
@@ -52,7 +52,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="iter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="iter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="improved_min.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/history.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/history.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/history.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -27,7 +27,7 @@
 <a name="boost_typetraits.history"></a><a class="link" href="history.html" title="History"> History</a>
 </h2></div></div></div>
 <a name="boost_typetraits.history.boost_1_44_0"></a><h5>
-<a name="id1101861"></a>
+<a name="id969631"></a>
       <a class="link" href="history.html#boost_typetraits.history.boost_1_44_0">Boost 1.44.0</a>
     </h5>
 <div class="itemizedlist"><ul type="disc">
@@ -43,7 +43,7 @@
         </li>
 </ul></div>
 <a name="boost_typetraits.history.boost_1_42_0"></a><h5>
-<a name="id1101916"></a>
+<a name="id969687"></a>
       <a class="link" href="history.html#boost_typetraits.history.boost_1_42_0">Boost 1.42.0</a>
     </h5>
 <div class="itemizedlist"><ul type="disc"><li>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/intrinsics.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/intrinsics.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/intrinsics.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -99,7 +99,7 @@
       of the following macros:
     </p>
 <div class="table">
-<a name="id1052050"></a><p class="title"><b>Table 1.4. Macros for Compiler Intrinsics</b></p>
+<a name="id915555"></a><p class="title"><b>Table 1.4. Macros for Compiler Intrinsics</b></p>
 <div class="table-contents"><table class="table" summary="Macros for Compiler Intrinsics">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
 <link rel="home" href="../index.html" title="Chapter 1. Boost.TypeTraits">
 <link rel="up" href="../index.html" title="Chapter 1. Boost.TypeTraits">
-<link rel="prev" href="examples/to_double.html" title="Convert Numeric Types and Enums to double">
+<link rel="prev" href="examples/improved_min.html" title="Improving std::min with common_type">
 <link rel="next" href="reference/add_const.html" title="add_const">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="examples/to_double.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/add_const.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="examples/improved_min.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/add_const.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -36,6 +36,7 @@
 <dt><span class="section"> add_volatile</span></dt>
 <dt><span class="section"> aligned_storage</span></dt>
 <dt><span class="section"> alignment_of</span></dt>
+<dt><span class="section"> common_type</span></dt>
 <dt><span class="section"> decay</span></dt>
 <dt><span class="section"> extent</span></dt>
 <dt><span class="section"><a href="reference/floating_point_promotion.html">
@@ -107,6 +108,8 @@
 <dt><span class="section"> remove_volatile</span></dt>
 <dt><span class="section"> type_with_alignment</span></dt>
 </dl></div>
+<p>
+    </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
 <td align="left"></td>
@@ -121,7 +124,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="examples/to_double.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/add_const.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="examples/improved_min.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/add_const.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_const.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_const.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_const.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -53,7 +53,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1058110"></a><p class="title"><b>Table 1.5. Examples</b></p>
+<a name="id921834"></a><p class="title"><b>Table 1.5. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_cv.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_cv.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_cv.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -54,7 +54,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1058587"></a><p class="title"><b>Table 1.6. Examples</b></p>
+<a name="id922312"></a><p class="title"><b>Table 1.6. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Added: trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_lvalue_reference.html
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_lvalue_reference.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,174 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>add_lvalue_reference</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
+<link rel="home" href="../../index.html" title="Chapter 1. Boost.TypeTraits">
+<link rel="up" href="../reference.html" title="Alphabetical Reference">
+<link rel="prev" href="add_cv.html" title="add_cv">
+<link rel="next" href="add_pointer.html" title="add_pointer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="add_cv.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="add_pointer.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_typetraits.reference.add_lvalue_reference"></a><a class="link" href="add_lvalue_reference.html" title="add_lvalue_reference"> add_lvalue_reference</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">add_lvalue_reference</span>
+<span class="special">{</span>
+   <span class="keyword">typedef</span> <em class="replaceable"><code>see-below</code></em> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+        <span class="bold"><strong>type:</strong></span> If <code class="computeroutput"><span class="identifier">T</span></code>
+        names an object or function type then the member typedef <code class="computeroutput"><span class="identifier">type</span></code>
+        shall name <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span></code>;
+        otherwise, if <code class="computeroutput"><span class="identifier">T</span></code> names a type
+        <span class="emphasis"><em>rvalue reference to U</em></span> then the member typedef type shall
+        name <code class="computeroutput"><span class="identifier">U</span><span class="special">&</span></code>;
+        otherwise, type shall name <code class="computeroutput"><span class="identifier">T</span></code>.
+      </p>
+<p>
+        <span class="bold"><strong>C++ Standard Reference:</strong></span> 20.7.6.2.
+      </p>
+<p>
+        <span class="bold"><strong>Compiler Compatibility:</strong></span> If the compiler
+        does not support partial specialization of class-templates then this template
+        will compile, but the member <code class="computeroutput"><span class="identifier">type</span></code>
+        will always be the same as type <code class="computeroutput"><span class="identifier">T</span></code>
+        except where <a class="link" href="../category/transform.html#boost_typetraits.category.transform.broken_compiler_workarounds_">compiler
+        workarounds</a> have been applied.
+      </p>
+<p>
+        <span class="bold"><strong>Header:</strong></span> <code class="computeroutput"> <span class="preprocessor">#include</span>
+        <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">/</span><span class="identifier">add_lvalue_reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
+        or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
+      </p>
+<div class="table">
+<a name="id922834"></a><p class="title"><b>Table 1.7. Examples</b></p>
+<div class="table-contents"><table class="table" summary="Examples">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                <p>
+                  Expression
+                </p>
+              </th>
+<th>
+                <p>
+                  Result Type
+                </p>
+              </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special"><</span><span class="keyword">int</span><span class="special">>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span><span class="special">&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special"><</span><span class="keyword">int</span>
+                  <span class="keyword">const</span><span class="special">&>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span> <span class="keyword">const</span><span class="special">&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special"><</span><span class="keyword">int</span><span class="special">*>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span><span class="special">*&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special"><</span><span class="keyword">int</span><span class="special">*&>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span><span class="special">*&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special"><</span><span class="keyword">int</span><span class="special">&&>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span><span class="special">&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special"><</span><span class="keyword">void</span><span class="special">>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">void</span></code>
+                </p>
+              </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2000, 2006 Adobe Systems Inc, David Abrahams,
+      Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant, Jesse Jones, Mat
+      Marcus, Itay Maman, John Maddock, Alexander Nasonov, Thorsten Ottosen, Robert
+      Ramey and Jeremy Siek<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="add_cv.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="add_pointer.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_pointer.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_pointer.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_pointer.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -56,7 +56,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1059719"></a><p class="title"><b>Table 1.8. Examples</b></p>
+<a name="id923444"></a><p class="title"><b>Table 1.8. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_reference.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_reference.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_reference.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -65,7 +65,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1060217"></a><p class="title"><b>Table 1.9. Examples</b></p>
+<a name="id923942"></a><p class="title"><b>Table 1.9. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Added: trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_rvalue_reference.html
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_rvalue_reference.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,172 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>add_rvalue_reference</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
+<link rel="home" href="../../index.html" title="Chapter 1. Boost.TypeTraits">
+<link rel="up" href="../reference.html" title="Alphabetical Reference">
+<link rel="prev" href="add_reference.html" title="add_reference">
+<link rel="next" href="add_volatile.html" title="add_volatile">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="add_reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="add_volatile.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_typetraits.reference.add_rvalue_reference"></a><a class="link" href="add_rvalue_reference.html" title="add_rvalue_reference"> add_rvalue_reference</a>
+</h3></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">add_rvalue_reference</span>
+<span class="special">{</span>
+   <span class="keyword">typedef</span> <em class="replaceable"><code>see-below</code></em> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+        <span class="bold"><strong>type:</strong></span> If <code class="computeroutput"><span class="identifier">T</span></code>
+        names an object or function type then the member typedef type shall name
+        <code class="computeroutput"><span class="identifier">T</span><span class="special">&&</span></code>;
+        otherwise, type shall name <code class="computeroutput"><span class="identifier">T</span></code>.
+        <span class="emphasis"><em>[Note: This rule reflects the semantics of reference collapsing.
+        For example, when a type <code class="computeroutput"><span class="identifier">T</span></code>
+        names a type U&, the type <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span></code> is not an rvalue reference. -end note]</em></span>.
+      </p>
+<p>
+        <span class="bold"><strong>C++ Standard Reference:</strong></span> 20.7.6.2.
+      </p>
+<p>
+        <span class="bold"><strong>Compiler Compatibility:</strong></span> If the compiler
+        does not support partial specialization of class-templates and rvalue references
+        then this template will compile, but the member <code class="computeroutput"><span class="identifier">type</span></code>
+        will always be the same as type <code class="computeroutput"><span class="identifier">T</span></code>.
+      </p>
+<p>
+        <span class="bold"><strong>Header:</strong></span> <code class="computeroutput"> <span class="preprocessor">#include</span>
+        <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">/</span><span class="identifier">add_rvalue_reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
+        or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
+      </p>
+<div class="table">
+<a name="id924446"></a><p class="title"><b>Table 1.10. Examples</b></p>
+<div class="table-contents"><table class="table" summary="Examples">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                <p>
+                  Expression
+                </p>
+              </th>
+<th>
+                <p>
+                  Result Type
+                </p>
+              </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="keyword">int</span><span class="special">>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span><span class="special">&&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="keyword">int</span>
+                  <span class="keyword">const</span><span class="special">&>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span> <span class="keyword">const</span><span class="special">&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="keyword">int</span><span class="special">*>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span><span class="special">*&&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="keyword">int</span><span class="special">*&>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span><span class="special">*&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="keyword">int</span><span class="special">&&>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">int</span><span class="special">&&</span></code>
+                </p>
+              </td>
+</tr>
+<tr>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="keyword">void</span><span class="special">>::</span><span class="identifier">type</span></code>
+                </p>
+              </td>
+<td>
+                <p>
+                  <code class="computeroutput"><span class="keyword">void</span></code>
+                </p>
+              </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2000, 2006 Adobe Systems Inc, David Abrahams,
+      Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant, Jesse Jones, Mat
+      Marcus, Itay Maman, John Maddock, Alexander Nasonov, Thorsten Ottosen, Robert
+      Ramey and Jeremy Siek<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="add_reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="add_volatile.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_volatile.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_volatile.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/add_volatile.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -53,7 +53,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1061289"></a><p class="title"><b>Table 1.11. Examples</b></p>
+<a name="id925014"></a><p class="title"><b>Table 1.11. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/alignment_of.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/alignment_of.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/alignment_of.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -7,7 +7,7 @@
 <link rel="home" href="../../index.html" title="Chapter 1. Boost.TypeTraits">
 <link rel="up" href="../reference.html" title="Alphabetical Reference">
 <link rel="prev" href="aligned_storage.html" title="aligned_storage">
-<link rel="next" href="decay.html" title="decay">
+<link rel="next" href="common_type.html" title="common_type">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="aligned_storage.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="decay.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="aligned_storage.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="common_type.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
@@ -76,7 +76,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="aligned_storage.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="decay.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="aligned_storage.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="common_type.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>
Added: trunk/libs/type_traits/doc/html/boost_typetraits/reference/common_type.html
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/common_type.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,350 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>common_type</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
+<link rel="home" href="../../index.html" title="Chapter 1. Boost.TypeTraits">
+<link rel="up" href="../reference.html" title="Alphabetical Reference">
+<link rel="prev" href="alignment_of.html" title="alignment_of">
+<link rel="next" href="decay.html" title="decay">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="alignment_of.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="decay.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_typetraits.reference.common_type"></a><a class="link" href="common_type.html" title="common_type"> common_type</a>
+</h3></div></div></div>
+<p>
+        <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">/</span><span class="identifier">common_type</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
+      </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+  <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">></span>  <span class="keyword">struct</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        <a class="link" href="common_type.html" title="common_type">common_type</a>
+        is a traits class used to deduce a type common to a several types, useful
+        as the return type of functions operating on multiple input types such as
+        in mixed-mode arithmetic..
+      </p>
+<p>
+        The nested typedef <code class="computeroutput"><span class="special">::</span><span class="identifier">type</span></code>
+        could be defined as follows:
+      </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">;</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">,</span> <span class="keyword">class</span> <span class="special">...</span><span class="identifier">V</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">U</span><span class="special">,...</span><span class="identifier">V</span><span class="special">></span> <span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special"><</span><span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">V</span><span class="special">...>::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">></span> <span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="identifier">decltype</span><span class="special">(</span>declval<span class="special"><</span><span class="keyword">bool</span><span class="special">>()</span> <span class="special">?</span> declval<span class="special"><</span><span class="identifier">T</span><span class="special">>()</span> <span class="special">:</span> declval<span class="special"><</span><span class="identifier">U</span><span class="special">>())</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+        All parameter types must be complete. This trait is permitted to be specialized
+        by a user if at least one template parameter is a user-defined type. <span class="bold"><strong>Note:</strong></span> Such specializations are required when only
+        explicit conversions are desired among the <a class="link" href="common_type.html" title="common_type">common_type</a>
+        arguments.
+      </p>
+<p>
+        Note that when the compiler does not support variadic templates (and the
+        macro BOOST_NO_VARIADIC_TEMPLATES is defined) then the maximum number of
+        template arguments is 3.
+      </p>
+<a name="boost_typetraits.reference.common_type.configuration_macros"></a><h5>
+<a name="id928233"></a>
+        <a class="link" href="common_type.html#boost_typetraits.reference.common_type.configuration_macros">Configuration
+        macros</a>
+      </h5>
+<p>
+        When the compiler does not support static assertions then the user can select
+        the way static assertions are reported. Define
+      </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+            BOOST_COMMON_TYPE_USES_STATIC_ASSERT: define it if you want to use Boost.StaticAssert
+          </li>
+<li>
+            BOOST_COMMON_TYPE_USES_MPL_ASSERT: define it if you want to use Boost.MPL
+            static asertions
+          </li>
+</ul></div>
+<p>
+        The default behavior is to use mpl assertions in this case, but setting BOOST_COMMON_TYPE_USES_STATIC_ASSERT
+        may reduce compile times and header dependencies somewhat.
+      </p>
+<p>
+        Depending on the static assertion used you will have an hint of the failing
+        assertion either through the symbol or through the text.
+      </p>
+<p>
+        When possible common_type is implemented using <code class="computeroutput"><span class="identifier">decltype</span></code>.
+        Otherwise when BOOST_COMMON_TYPE_DONT_USE_TYPEOF is not defined it uses Boost.TypeOf.
+      </p>
+<a name="boost_typetraits.reference.common_type.tutorial"></a><h5>
+<a name="id928289"></a>
+        <a class="link" href="common_type.html#boost_typetraits.reference.common_type.tutorial">Tutorial</a>
+      </h5>
+<p>
+        In a nutshell, <a class="link" href="common_type.html" title="common_type">common_type</a>
+        is a trait that takes 1 or more types, and returns a type which all of the
+        types will convert to. The default definition demands this conversion be
+        implicit. However the trait can be specialized for user-defined types which
+        want to limit their inter-type conversions to explicit, and yet still want
+        to interoperate with the <a class="link" href="common_type.html" title="common_type">common_type</a>
+        facility.
+      </p>
+<p>
+        <span class="bold"><strong>Example:</strong></span>
+      </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span>
+<span class="identifier">complex</span><span class="special"><</span><span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">>::</span><span class="identifier">type</span><span class="special">></span>
+<span class="keyword">operator</span><span class="special">+(</span><span class="identifier">complex</span><span class="special"><</span><span class="identifier">T</span><span class="special">>,</span> <span class="identifier">complex</span><span class="special"><</span><span class="identifier">U</span><span class="special">>);</span>
+</pre>
+<p>
+        In the above example, "mixed-mode" complex arithmetic is allowed.
+        The return type is described by <a class="link" href="common_type.html" title="common_type">common_type</a>.
+        For example the resulting type of adding a <code class="computeroutput"><span class="identifier">complex</span><span class="special"><</span><span class="keyword">float</span><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">complex</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span></code> might be a <code class="computeroutput"><span class="identifier">complex</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span></code>.
+      </p>
+<p>
+        Here is how someone might produce a variadic comparison function:
+      </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">></span>
+<span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special"><</span><span class="identifier">T</span><span class="special">...>::</span><span class="identifier">type</span>
+<span class="identifier">min</span><span class="special">(</span><span class="identifier">T</span><span class="special">...</span> <span class="identifier">t</span><span class="special">);</span>
+</pre>
+<p>
+        This is a very useful and broadly applicable utility.
+      </p>
+<a name="boost_typetraits.reference.common_type.how_to_get_the_common_type_of_types_with_explicit_conversions_"></a><h5>
+<a name="id928590"></a>
+        <a class="link" href="common_type.html#boost_typetraits.reference.common_type.how_to_get_the_common_type_of_types_with_explicit_conversions_">How
+        to get the common type of types with explicit conversions?</a>
+      </h5>
+<p>
+        Another choice for the author of the preceding operator could be
+      </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span>
+<span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special"><</span><span class="identifier">complex</span><span class="special"><</span><span class="identifier">T</span><span class="special">>,</span> <span class="identifier">complex</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="special">>::</span><span class="identifier">type</span>
+<span class="keyword">operator</span><span class="special">+(</span><span class="identifier">complex</span><span class="special"><</span><span class="identifier">T</span><span class="special">>,</span> <span class="identifier">complex</span><span class="special"><</span><span class="identifier">U</span><span class="special">>);</span>
+</pre>
+<p>
+        As the default definition of <a class="link" href="common_type.html" title="common_type">common_type</a>
+        demands the conversion be implicit, we need to specialize the trait for complex
+        types as follows.
+      </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span>
+<span class="keyword">struct</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special"><</span><span class="identifier">complex</span><span class="special"><</span><span class="identifier">T</span><span class="special">>,</span> <span class="identifier">complex</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="special">></span> <span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="identifier">complex</span><span class="special"><</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">></span> <span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<a name="boost_typetraits.reference.common_type.how_important_is_the_order_of_the_common_type_lt__gt__template_arguments_"></a><h5>
+<a name="id928890"></a>
+        <a class="link" href="common_type.html#boost_typetraits.reference.common_type.how_important_is_the_order_of_the_common_type_lt__gt__template_arguments_">How
+        important is the order of the common_type<> template arguments?</a>
+      </h5>
+<p>
+        The order of the template parameters is important.
+      </p>
+<p>
+        <code class="computeroutput"><span class="identifier">common_type</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">C</span><span class="special">>::</span><span class="identifier">type</span></code> is not equivalent to <code class="computeroutput"><span class="identifier">common_type</span><span class="special"><</span><span class="identifier">C</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">type</span></code>, but to <code class="computeroutput"><span class="identifier">common_type</span><span class="special"><</span><span class="identifier">common_type</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">type</span><span class="special">,</span> <span class="identifier">C</span><span class="special">>::</span><span class="identifier">type</span></code>.
+      </p>
+<p>
+        Consider
+      </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">A</span> <span class="special">{};</span>
+<span class="keyword">struct</span> <span class="identifier">B</span> <span class="special">{};</span>
+<span class="keyword">struct</span> <span class="identifier">C</span> <span class="special">{</span>
+    <span class="identifier">C</span><span class="special">()</span> <span class="special">{}</span>
+    <span class="identifier">C</span><span class="special">(</span><span class="identifier">A</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">{}</span>
+    <span class="identifier">C</span><span class="special">(</span><span class="identifier">B</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">{}</span>
+    <span class="identifier">C</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">C</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">{</span>
+        <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span>
+    <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+        The following doesn't compile
+      </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">common_type</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">C</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">ABC</span><span class="special">;</span> <span class="comment">// Does not compile
+</span></pre>
+<p>
+        while
+      </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">common_type</span><span class="special"><</span><span class="identifier">C</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">type</span> <span class="identifier">ABC</span><span class="special">;</span>
+</pre>
+<p>
+        compiles.
+      </p>
+<p>
+        Thus, as <code class="computeroutput"><span class="identifier">common_type</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">type</span></code>
+        is undefined, <code class="computeroutput"><span class="identifier">common_type</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">C</span><span class="special">>::</span><span class="identifier">type</span></code>
+        is also undefined.
+      </p>
+<p>
+        It is intended that clients who wish for <code class="computeroutput"><span class="identifier">common_type</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span>
+        <span class="identifier">B</span><span class="special">></span></code>
+        to be well defined to define it themselves:
+      </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span>
+<span class="special">{</span>
+
+<span class="keyword">template</span> <span class="special"><></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</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="special">{</span><span class="keyword">typedef</span> <span class="identifier">C</span> <span class="identifier">type</span><span class="special">;};</span>
+
+<span class="special">}</span> 
+</pre>
+<p>
+        Now this client can ask for <code class="computeroutput"><span class="identifier">common_type</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">C</span><span class="special">></span></code> (and
+        get the same answer).
+      </p>
+<p>
+        Clients wanting to ask <code class="computeroutput"><span class="identifier">common_type</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">C</span><span class="special">></span></code> in
+        any order and get the same result need to add in addition:
+      </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span>
+<span class="special">{</span>
+
+<span class="keyword">template</span> <span class="special"><></span> <span class="keyword">struct</span> <span class="identifier">common_type</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="special">:</span> <span class="keyword">public</span> <span class="identifier">common_type</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="special">{};</span>
+
+<span class="special">}</span> 
+</pre>
+<p>
+        This is needed as the specialization of <code class="computeroutput"><span class="identifier">common_type</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span>
+        <span class="identifier">B</span><span class="special">></span></code>
+        is not be used implicitly for <code class="computeroutput"><span class="identifier">common_type</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>
+<a name="boost_typetraits.reference.common_type.can_the_common_type_of_two_types_be_a_third_type_"></a><h5>
+<a name="id929759"></a>
+        <a class="link" href="common_type.html#boost_typetraits.reference.common_type.can_the_common_type_of_two_types_be_a_third_type_">Can
+        the common_type of two types be a third type?</a>
+      </h5>
+<p>
+        Given the preceding example, one might expect <code class="computeroutput"><span class="identifier">common_type</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">type</span></code> to be <code class="computeroutput"><span class="identifier">C</span></code>
+        without any intervention from the user. But the default <code class="computeroutput"><span class="identifier">common_type</span><span class="special"><></span></code> implementation doesn't grant that.
+        It is intended that clients who wish for <code class="computeroutput"><span class="identifier">common_type</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span>
+        <span class="identifier">B</span><span class="special">></span></code>
+        to be well defined to define it themselves:
+      </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span>
+<span class="special">{</span>
+
+<span class="keyword">template</span> <span class="special"><></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</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="special">{</span><span class="keyword">typedef</span> <span class="identifier">C</span> <span class="identifier">type</span><span class="special">;};</span>
+
+<span class="keyword">template</span> <span class="special"><></span> <span class="keyword">struct</span> <span class="identifier">common_type</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="special">:</span> <span class="keyword">public</span> <span class="identifier">common_type</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="special">{};</span>
+
+<span class="special">}</span> 
+</pre>
+<p>
+        Now this client can ask for <code class="computeroutput"><span class="identifier">common_type</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span>
+        <span class="identifier">B</span><span class="special">></span></code>.
+      </p>
+<a name="boost_typetraits.reference.common_type.how_common_type_behaves_with_pointers_"></a><h5>
+<a name="id930041"></a>
+        <a class="link" href="common_type.html#boost_typetraits.reference.common_type.how_common_type_behaves_with_pointers_">How
+        common_type behaves with pointers?</a>
+      </h5>
+<p>
+        Consider
+      </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">C</span> <span class="special">{</span> <span class="special">}:</span>
+<span class="keyword">struct</span> <span class="identifier">B</span> <span class="special">:</span> <span class="identifier">C</span> <span class="special">{</span> <span class="special">};</span>
+<span class="keyword">struct</span> <span class="identifier">A</span> <span class="special">:</span> <span class="identifier">C</span> <span class="special">{</span> <span class="special">};</span>
+</pre>
+<p>
+        Shouldn't <code class="computeroutput"><span class="identifier">common_type</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">type</span></code>
+        be <code class="computeroutput"><span class="identifier">C</span><span class="special">*</span></code>?
+        I would say yes, but the default implementation will make it ill-formed.
+      </p>
+<p>
+        The library could add a specialization for pointers, as
+      </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span>
+<span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">B</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">common_type</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="special">{</span>
+        <span class="keyword">typedef</span> <span class="identifier">common_type</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">type</span><span class="special">;</span>
+    <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+        But in the absence of a motivating use cases, we prefer not to add more than
+        the standard specifies.
+      </p>
+<p>
+        Of course the user can always make this specialization.
+      </p>
+<a name="boost_typetraits.reference.common_type.can_you_explain_the_pros_cons_of_common_type_against_boost_typeof_"></a><h5>
+<a name="id930325"></a>
+        <a class="link" href="common_type.html#boost_typetraits.reference.common_type.can_you_explain_the_pros_cons_of_common_type_against_boost_typeof_">Can
+        you explain the pros/cons of common_type against Boost.Typeof?</a>
+      </h5>
+<p>
+        Even if they appear to be close, <code class="computeroutput"><a class="link" href="common_type.html" title="common_type">common_type</a></code>
+        and <code class="computeroutput"><span class="identifier">typeof</span></code> have different
+        purposes. You use <code class="computeroutput"><span class="identifier">typeof</span></code>
+        to get the type of an expression, while you use <a class="link" href="common_type.html" title="common_type">common_type</a>
+        to set explicitly the type returned of a template function. Both are complementary,
+        and indeed <a class="link" href="common_type.html" title="common_type">common_type</a>
+        is equivalent to <code class="computeroutput"><span class="identifier">decltype</span><span class="special">(</span>declval<span class="special"><</span><span class="keyword">bool</span><span class="special">>()</span>
+        <span class="special">?</span> declval<span class="special"><</span><span class="identifier">T</span><span class="special">>()</span>
+        <span class="special">:</span> declval<span class="special"><</span><span class="identifier">U</span><span class="special">>())</span></code>
+      </p>
+<p>
+        <a class="link" href="common_type.html" title="common_type">common_type</a>
+        is also similar to promote_args<class ...T> in boost/math/tools/promotion.hpp,
+        though it is not exactly the same as promote_args either. <a class="link" href="common_type.html" title="common_type">common_type</a><T1,
+        T2>::type simply represents the result of some operation on T1 and T2,
+        and defaults to the type obtained by putting T1 and T2 into a conditional
+        statement.
+      </p>
+<p>
+        It is meant to be customizable (via specialization) if this default is not
+        appropriate.
+      </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2000, 2006 Adobe Systems Inc, David Abrahams,
+      Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant, Jesse Jones, Mat
+      Marcus, Itay Maman, John Maddock, Alexander Nasonov, Thorsten Ottosen, Robert
+      Ramey and Jeremy Siek<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="alignment_of.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="decay.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: trunk/libs/type_traits/doc/html/boost_typetraits/reference/common_type_hpp.html
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/common_type_hpp.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,117 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>common_type</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
+<link rel="home" href="../../index.html" title="Chapter 1. Boost.TypeTraits">
+<link rel="up" href="../reference.html" title="Alphabetical Reference">
+<link rel="prev" href="alignment_of.html" title="alignment_of">
+<link rel="next" href="decay.html" title="decay">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="alignment_of.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="decay.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_typetraits.reference.common_type_hpp"></a><a class="link" href="common_type_hpp.html" title="common_type"> common_type</a>
+</h3></div></div></div>
+<p>
+        <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">/</span><span class="identifier">common_type</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
+      </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+  <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">></span>  <span class="keyword">struct</span> <a class="link" href="../../">common_type</a><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        <a class="link" href="../../">common_type</a>
+        is a traits class used to deduce a type common to a several types, useful
+        as the return type of functions operating on multiple input types such as
+        in mixed-mode arithmetic..
+      </p>
+<p>
+        The nested typedef <code class="computeroutput"><span class="special">::</span><span class="identifier">type</span></code>
+        could be defined as follows:
+      </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">;</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">,</span> <span class="keyword">class</span> <span class="special">...</span><span class="identifier">V</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">U</span><span class="special">,...</span><span class="identifier">V</span><span class="special">></span> <span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">__common_type__</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">__common_type__</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">V</span><span class="special">...>::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">></span> <span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="identifier">decltype</span><span class="special">(</span><span class="identifier">__declval__</span><span class="special"><</span><span class="keyword">bool</span><span class="special">>()</span> <span class="special">?</span> <span class="identifier">__declval__</span><span class="special"><</span><span class="identifier">T</span><span class="special">>()</span> <span class="special">:</span> <span class="identifier">__declval__</span><span class="special"><</span><span class="identifier">U</span><span class="special">>())</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+        All parameter types must be complete. This trait is permitted to be specialized
+        by a user if at least one template parameter is a user-defined type. <span class="bold"><strong>Note:</strong></span> Such specializations are required when only
+        explicit conversions are desired among the <a class="link" href="../../">common_type</a>
+        arguments.
+      </p>
+<a name="boost_typetraits.reference.common_type_hpp.configuration_macros"></a><h5>
+<a name="id895242"></a>
+        <a class="link" href="common_type_hpp.html#boost_typetraits.reference.common_type_hpp.configuration_macros">Configuration
+        macros</a>
+      </h5>
+<p>
+        When the compiler does not support static assertions then the user can select
+        the way static assertions are reported. Define
+      </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+            BOOST_COMMON_TYPE_USES_STATIC_ASSERT: define it if you want to use Boost.StaticAssert
+          </li>
+<li>
+            BOOST_COMMON_TYPE_USES_MPL_ASSERT: define it if you want to use Boost.MPL
+            static asertions
+          </li>
+</ul></div>
+<p>
+        The default behavior is to use mpl assertions in this case, but setting BOOST_COMMON_TYPE_USES_STATIC_ASSERT
+        may reduce compile times and header dependencies somewhat.
+      </p>
+<p>
+        Depending on the static assertion used you will have an hint of the failing
+        assertion either through the symbol or through the text.
+      </p>
+<p>
+        When possible common_type is implemented using <code class="computeroutput"><span class="identifier">decltype</span></code>.
+        Otherwise when BOOST_COMMON_TYPE_DONT_USE_TYPEOF is not defined it uses Boost.TypeOf.
+      </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2000, 2006 Adobe Systems Inc, David Abrahams,
+      Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant, Jesse Jones, Mat
+      Marcus, Itay Maman, John Maddock, Alexander Nasonov, Thorsten Ottosen, Robert
+      Ramey and Jeremy Siek<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="alignment_of.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="decay.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/decay.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/decay.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/decay.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
 <link rel="home" href="../../index.html" title="Chapter 1. Boost.TypeTraits">
 <link rel="up" href="../reference.html" title="Alphabetical Reference">
-<link rel="prev" href="alignment_of.html" title="alignment_of">
+<link rel="prev" href="common_type.html" title="common_type">
 <link rel="next" href="extent.html" title="extent">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="alignment_of.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="extent.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="common_type.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="extent.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
@@ -48,7 +48,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1064172"></a><p class="title"><b>Table 1.12. Examples</b></p>
+<a name="id930714"></a><p class="title"><b>Table 1.12. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
@@ -145,7 +145,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="alignment_of.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="extent.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="common_type.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="extent.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/floating_point_promotion.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/floating_point_promotion.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/floating_point_promotion.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -49,7 +49,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1065724"></a><p class="title"><b>Table 1.13. Examples</b></p>
+<a name="id933358"></a><p class="title"><b>Table 1.13. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/function_traits.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/function_traits.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/function_traits.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -59,7 +59,7 @@
         </p></td></tr>
 </table></div>
 <div class="table">
-<a name="id1066098"></a><p class="title"><b>Table 1.14. Function Traits Members</b></p>
+<a name="id933731"></a><p class="title"><b>Table 1.14. Function Traits Members</b></p>
 <div class="table-contents"><table class="table" summary="Function Traits Members">
 <colgroup>
 <col>
@@ -122,7 +122,7 @@
 </table></div>
 </div>
 <br class="table-break"><div class="table">
-<a name="id1066315"></a><p class="title"><b>Table 1.15. Examples</b></p>
+<a name="id933949"></a><p class="title"><b>Table 1.15. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/integral_promotion.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/integral_promotion.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/integral_promotion.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -49,7 +49,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1071961"></a><p class="title"><b>Table 1.16. Examples</b></p>
+<a name="id940687"></a><p class="title"><b>Table 1.16. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/make_signed.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/make_signed.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/make_signed.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -54,7 +54,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1093886"></a><p class="title"><b>Table 1.17. Examples</b></p>
+<a name="id961588"></a><p class="title"><b>Table 1.17. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/make_unsigned.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/make_unsigned.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/make_unsigned.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -54,7 +54,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1094368"></a><p class="title"><b>Table 1.18. Examples</b></p>
+<a name="id962071"></a><p class="title"><b>Table 1.18. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/promote.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/promote.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/promote.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -51,7 +51,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1094893"></a><p class="title"><b>Table 1.19. Examples</b></p>
+<a name="id963756"></a><p class="title"><b>Table 1.19. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_all_extents.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_all_extents.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_all_extents.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -54,7 +54,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1097629"></a><p class="title"><b>Table 1.20. Examples</b></p>
+<a name="id964853"></a><p class="title"><b>Table 1.20. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_const.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_const.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_const.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -53,7 +53,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1098172"></a><p class="title"><b>Table 1.21. Examples</b></p>
+<a name="id965396"></a><p class="title"><b>Table 1.21. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_cv.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_cv.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_cv.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -53,7 +53,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1098703"></a><p class="title"><b>Table 1.22. Examples</b></p>
+<a name="id967020"></a><p class="title"><b>Table 1.22. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_extent.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_extent.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_extent.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -54,7 +54,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1099232"></a><p class="title"><b>Table 1.23. Examples</b></p>
+<a name="id967549"></a><p class="title"><b>Table 1.23. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_pointer.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_pointer.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_pointer.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -55,7 +55,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1099787"></a><p class="title"><b>Table 1.24. Examples</b></p>
+<a name="id968103"></a><p class="title"><b>Table 1.24. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_reference.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_reference.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_reference.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -53,7 +53,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1100299"></a><p class="title"><b>Table 1.25. Examples</b></p>
+<a name="id968616"></a><p class="title"><b>Table 1.25. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_volatile.html
==============================================================================
--- trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_volatile.html	(original)
+++ trunk/libs/type_traits/doc/html/boost_typetraits/reference/remove_volatile.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -53,7 +53,7 @@
         or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
       </p>
 <div class="table">
-<a name="id1100801"></a><p class="title"><b>Table 1.26. Examples</b></p>
+<a name="id969118"></a><p class="title"><b>Table 1.26. Examples</b></p>
 <div class="table-contents"><table class="table" summary="Examples">
 <colgroup>
 <col>
Modified: trunk/libs/type_traits/doc/html/index.html
==============================================================================
--- trunk/libs/type_traits/doc/html/index.html	(original)
+++ trunk/libs/type_traits/doc/html/index.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -30,7 +30,7 @@
       Marcus, Itay Maman, John Maddock, Alexander Nasonov, Thorsten Ottosen, Robert
       Ramey and Jeremy Siek</p></div>
 <div><div class="legalnotice">
-<a name="id1038564"></a><p>
+<a name="id902030"></a><p>
         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)
       </p>
@@ -75,6 +75,8 @@
       of std::iter_swap</a></span></dt>
 <dt><span class="section"><a href="boost_typetraits/examples/to_double.html"> Convert Numeric
       Types and Enums to double</a></span></dt>
+<dt><span class="section"><a href="boost_typetraits/examples/improved_min.html"> Improving std::min
+      with common_type</a></span></dt>
 </dl></dd>
 <dt><span class="section"> Alphabetical Reference</span></dt>
 <dd><dl>
@@ -87,6 +89,7 @@
 <dt><span class="section"> add_volatile</span></dt>
 <dt><span class="section"> aligned_storage</span></dt>
 <dt><span class="section"> alignment_of</span></dt>
+<dt><span class="section"> common_type</span></dt>
 <dt><span class="section"> decay</span></dt>
 <dt><span class="section"> extent</span></dt>
 <dt><span class="section"><a href="boost_typetraits/reference/floating_point_promotion.html">
@@ -168,7 +171,7 @@
   </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: July 01, 2010 at 17:14:17 +0100</small></p></td>
+<td align="left"><p><small>Last revised: September 11, 2010 at 19:00:56 +0100</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>
Modified: trunk/libs/type_traits/doc/transform_traits.qbk
==============================================================================
--- trunk/libs/type_traits/doc/transform_traits.qbk	(original)
+++ trunk/libs/type_traits/doc/transform_traits.qbk	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -35,6 +35,9 @@
    template <class T>
    struct __add_volatile;
 
+   template <class... T>
+   struct __common_type;
+
    template <class T>
    struct __decay;
 
Modified: trunk/libs/type_traits/doc/type_traits.qbk
==============================================================================
--- trunk/libs/type_traits/doc/type_traits.qbk	(original)
+++ trunk/libs/type_traits/doc/type_traits.qbk	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -107,6 +107,7 @@
 [def __add_const [link boost_typetraits.reference.add_const add_const]]
 [def __add_volatile [link boost_typetraits.reference.add_volatile add_volatile]]
 [def __add_cv [link boost_typetraits.reference.add_cv add_cv]]
+[def __common_type [link boost_typetraits.reference.common_type common_type]]
 
 [def __type_with_alignment [link boost_typetraits.reference.type_with_alignment type_with_alignment]]
 [def __aligned_storage [link boost_typetraits.reference.aligned_storage aligned_storage]]
@@ -171,6 +172,7 @@
 [include add_volatile.qbk]
 [include aligned_storage.qbk]
 [include alignment_of.qbk]
+[include common_type.qbk]
 [include decay.qbk]
 [include extent.qbk]
 [include floating_point_promotion.qbk]
Modified: trunk/libs/type_traits/test/Jamfile.v2
==============================================================================
--- trunk/libs/type_traits/test/Jamfile.v2	(original)
+++ trunk/libs/type_traits/test/Jamfile.v2	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -32,5 +32,7 @@
             
 test-suite type_traits : [ all-tests ] ;
 
+compile-fail common_type_fail.cpp ;
+
 
 
Added: trunk/libs/type_traits/test/alignment_of_a2_test.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/test/alignment_of_a2_test.cpp	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,126 @@
+
+#ifdef _MSC_VER
+#pragma pack(2)
+#endif
+
+//  (C) Copyright John Maddock 2000. 
+//  Use, modification and distribution are subject to 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)
+
+#include "test.hpp"
+#include "check_integral_constant.hpp"
+#ifdef TEST_STD
+#  include <type_traits>
+#else
+#  include <boost/type_traits/alignment_of.hpp>
+#endif
+
+//
+// Need to defined some member functions for empty_UDT,
+// we don't want to put these in the test.hpp as that
+// causes overly-clever compilers to figure out that they can't throw
+// which in turn breaks other tests.
+//
+empty_UDT::empty_UDT(){}
+empty_UDT::~empty_UDT(){}
+empty_UDT::empty_UDT(const empty_UDT&){}
+empty_UDT& empty_UDT::operator=(const empty_UDT&){ return *this; }
+bool empty_UDT::operator==(const empty_UDT&)const{ return true; }
+
+
+//
+// VC++ emits an awful lot of warnings unless we define these:
+#ifdef BOOST_MSVC
+#  pragma warning(disable:4244 4121)
+//
+// What follows here is the test case for issue 1946.
+//
+#include <boost/function.hpp>
+// This kind of packing is set within MSVC 9.0 headers.
+// E.g. std::ostream has it.
+#pragma pack(push,8)
+
+// The issue is gone if Root has no data members
+struct Root { int a; };
+// The issue is gone if Root is inherited non-virtually
+struct A : virtual public Root {};
+
+#pragma pack(pop)
+//
+// This class has 8-byte alignment but is 44 bytes in size, which means 
+// that elements in an array of this type will not actually be 8 byte
+// aligned.  This appears to be an MSVC bug, and throws off our 
+// alignment calculations: causing us to report a non-sensical 12-byte
+// alignment for this type.  This is fixed by using the native __alignof
+// operator.
+//
+class issue1946 :
+    public A
+{
+public:
+    // The issue is gone if the type is not a boost::function. The signature doesn't matter.
+    typedef boost::function0< void > function_type;
+    function_type m_function;
+};
+
+#endif
+
+
+template <class T>
+struct align_calc
+{
+   char padding;
+   T instance;
+   static std::ptrdiff_t get()
+   {
+      static align_calc<T> a;
+      return reinterpret_cast<const char*>(&(a.instance)) - reinterpret_cast<const char*>(&(a.padding));
+   }
+};
+
+#define ALIGNOF(x) align_calc< x>::get()
+
+TT_TEST_BEGIN(alignment_of)
+
+#ifndef TEST_STD
+// This test is not required to work for non-boost implementations:
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<void>::value, 0);
+#endif
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<char>::value, ALIGNOF(char));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<short>::value, ALIGNOF(short));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<int>::value, ALIGNOF(int));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<long>::value, ALIGNOF(long));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<float>::value, ALIGNOF(float));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<double>::value, ALIGNOF(double));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<long double>::value, ALIGNOF(long double));
+#ifdef BOOST_HAS_LONG_LONG
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of< ::boost::long_long_type>::value, ALIGNOF(::boost::long_long_type));
+#endif
+#ifdef BOOST_HAS_MS_INT64
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<__int64>::value, ALIGNOF(__int64));
+#endif
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<int[4]>::value, ALIGNOF(int[4]));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<int(*)(int)>::value, ALIGNOF(int(*)(int)));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<int*>::value, ALIGNOF(int*));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<VB>::value, ALIGNOF(VB));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<VD>::value, ALIGNOF(VD));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<enum_UDT>::value, ALIGNOF(enum_UDT));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<mf2>::value, ALIGNOF(mf2));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<POD_UDT>::value, ALIGNOF(POD_UDT));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<empty_UDT>::value, ALIGNOF(empty_UDT));
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<union_UDT>::value, ALIGNOF(union_UDT));
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)
+BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<issue1946>::value, ALIGNOF(issue1946));
+#endif
+
+TT_TEST_END
+
+
+
+
+
+
+
+
Deleted: trunk/libs/type_traits/test/alignment_of_test_a2.cpp
==============================================================================
--- trunk/libs/type_traits/test/alignment_of_test_a2.cpp	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
+++ (empty file)
@@ -1,113 +0,0 @@
-
-#ifdef _MSC_VER
-#pragma pack(2)
-#endif
-
-//  (C) Copyright John Maddock 2000. 
-//  Use, modification and distribution are subject to 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)
-
-#include "test.hpp"
-#include "check_integral_constant.hpp"
-#ifdef TEST_STD
-#  include <type_traits>
-#else
-#  include <boost/type_traits/alignment_of.hpp>
-#endif
-
-//
-// VC++ emits an awful lot of warnings unless we define these:
-#ifdef BOOST_MSVC
-#  pragma warning(disable:4244)
-//
-// What follows here is the test case for issue 1946.
-//
-#include <boost/function.hpp>
-// This kind of packing is set within MSVC 9.0 headers.
-// E.g. std::ostream has it.
-#pragma pack(push,8)
-
-// The issue is gone if Root has no data members
-struct Root { int a; };
-// The issue is gone if Root is inherited non-virtually
-struct A : virtual public Root {};
-
-#pragma pack(pop)
-//
-// This class has 8-byte alignment but is 44 bytes in size, which means 
-// that elements in an array of this type will not actually be 8 byte
-// aligned.  This appears to be an MSVC bug, and throws off our 
-// alignment calculations: causing us to report a non-sensical 12-byte
-// alignment for this type.  This is fixed by using the native __alignof
-// operator.
-//
-class issue1946 :
-    public A
-{
-public:
-    // The issue is gone if the type is not a boost::function. The signature doesn't matter.
-    typedef boost::function0< void > function_type;
-    function_type m_function;
-};
-
-#endif
-
-
-template <class T>
-struct align_calc
-{
-   char padding;
-   T instance;
-   static std::ptrdiff_t get()
-   {
-      static align_calc<T> a;
-      return reinterpret_cast<const char*>(&(a.instance)) - reinterpret_cast<const char*>(&(a.padding));
-   }
-};
-
-#define ALIGNOF(x) align_calc< x>::get()
-
-TT_TEST_BEGIN(alignment_of)
-
-#ifndef TEST_STD
-// This test is not required to work for non-boost implementations:
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<void>::value, 0);
-#endif
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<char>::value, ALIGNOF(char));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<short>::value, ALIGNOF(short));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<int>::value, ALIGNOF(int));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<long>::value, ALIGNOF(long));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<float>::value, ALIGNOF(float));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<double>::value, ALIGNOF(double));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<long double>::value, ALIGNOF(long double));
-#ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of< ::boost::long_long_type>::value, ALIGNOF(::boost::long_long_type));
-#endif
-#ifdef BOOST_HAS_MS_INT64
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<__int64>::value, ALIGNOF(__int64));
-#endif
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<int[4]>::value, ALIGNOF(int[4]));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<int(*)(int)>::value, ALIGNOF(int(*)(int)));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<int*>::value, ALIGNOF(int*));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<VB>::value, ALIGNOF(VB));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<VD>::value, ALIGNOF(VD));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<enum_UDT>::value, ALIGNOF(enum_UDT));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<mf2>::value, ALIGNOF(mf2));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<POD_UDT>::value, ALIGNOF(POD_UDT));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<empty_UDT>::value, ALIGNOF(empty_UDT));
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<union_UDT>::value, ALIGNOF(union_UDT));
-
-#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)
-BOOST_CHECK_INTEGRAL_CONSTANT(::tt::alignment_of<issue1946>::value, ALIGNOF(issue1946));
-#endif
-
-TT_TEST_END
-
-
-
-
-
-
-
-
Added: trunk/libs/type_traits/test/common_type_fail.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/test/common_type_fail.cpp	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,28 @@
+//  common_type_test.cpp  ----------------------------------------------------//
+
+//  Copyright 2010 Beman Dawes
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#define _CRT_SECURE_NO_WARNINGS  // disable VC++ foolishness
+
+#include "test.hpp"
+#ifndef TEST_STD 
+#include <boost/type_traits/common_type.hpp>
+#else
+#include <type_traits>
+#endif
+
+struct C1 {
+    //~ private:
+        //~ C1();
+};
+    
+struct C2 {};
+
+
+
+typedef tt::common_type<C1, C2>::type AC;
+   
+    
\ No newline at end of file
Added: trunk/libs/type_traits/test/common_type_test.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/type_traits/test/common_type_test.cpp	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,103 @@
+//  common_type_test.cpp  ----------------------------------------------------//
+
+//  Copyright 2010 Beman Dawes
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#include "test.hpp"
+#include "check_type.hpp"
+#ifdef TEST_STD
+#  include <type_traits>
+#else
+#  include <boost/type_traits/common_type.hpp>
+#endif
+#include <iostream>
+
+struct C1 {};
+    
+struct C2 {};
+
+    
+struct C3 : C2 {};
+struct C1C2 {
+    C1C2() {}
+    C1C2(C1 const&) {}
+    C1C2(C2 const&) {}
+    C1C2& operator=(C1C2 const&) {
+        return *this;
+    }
+};
+
+template <typename C, typename A>
+void proc2(typename boost::common_type<A, C>::type const& ) {}
+
+template <typename C, typename A, typename B>
+void proc3(typename boost::common_type<C, A, B>::type const& ) {}
+
+template <typename C, typename A>
+void assignation_2() {
+typedef typename boost::common_type<A, C>::type AC;
+    A a;
+    C c;
+    AC ac;
+    ac=a;
+    ac=c;
+
+    proc2<C, A>(a);
+    proc2<C, A>(c);
+    
+}
+
+template <typename C, typename A, typename B>
+void assignation_3() {
+typedef typename boost::common_type<C, A, B>::type ABC;
+    A a;
+    B b;
+    C c;
+    ABC abc;
+    
+    abc=a;
+    abc=b;
+    abc=c;
+    
+    proc3<C, A, B>(a);
+    proc3<C, A, B>(b);
+    proc3<C, A, B>(c);
+}
+
+C1C2 c1c2;
+C1 c1;
+
+int f(C1C2 ) { return 1;}
+int f(C1 ) { return 2;}
+template <typename OSTREAM>
+OSTREAM& operator<<(OSTREAM& os, C1 const&) {return os;}
+
+C1C2& declval_C1C2() {return c1c2;}
+C1& declval_C1(){return c1;}
+bool declval_bool(){return true;}
+
+
+TT_TEST_BEGIN(common_type)
+{
+    assignation_2<C1C2, C1>();
+    typedef tt::common_type<C1C2&, C1&>::type T1;
+    typedef tt::common_type<C3*, C2*>::type T2;
+    typedef tt::common_type<int*, int const*>::type T3;
+#if defined(BOOST_NO_DECLTYPE) && !defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
+    // fails if BOOST_COMMON_TYPE_DONT_USE_TYPEOF:
+    typedef tt::common_type<int volatile*, int const*>::type T4;
+#endif
+    typedef tt::common_type<int*, int volatile*>::type T5;
+
+    assignation_2<C1, C1C2>();
+    assignation_2<C1C2, C2>();
+    assignation_2<C2, C1C2>();
+    assignation_3<C1, C1C2, C2>();
+    assignation_3<C1C2, C1, C2>();
+    assignation_3<C2, C1C2, C1>();
+    assignation_3<C1C2, C2, C1>();
+    //assignation_3<C1, C2, C1C2>(); // fails because the common type is the third
+}
+TT_TEST_END
Added: trunk/libs/utility/doc/Jamfile.v2
==============================================================================
--- (empty file)
+++ trunk/libs/utility/doc/Jamfile.v2	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,68 @@
+
+# Copyright John Maddock 2005. Use, modification, and distribution are
+# subject to 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)
+
+project : requirements
+        # Path for links to Boost:
+        <xsl:param>boost.root=../../../..
+        
+        # Some general style settings:
+        <xsl:param>table.footnote.number.format=1
+        <xsl:param>footnote.number.format=1
+
+        # HTML options first:
+        # Use graphics not text for navigation:
+        <xsl:param>navig.graphics=1
+       # PDF Options:
+        # TOC Generation: this is needed for FOP-0.9 and later:
+        <xsl:param>fop1.extensions=0
+        <xsl:param>xep.extensions=1
+        # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
+        <xsl:param>fop.extensions=0
+        # No indent on body text:
+        <xsl:param>body.start.indent=0pt
+        # Margin size:
+        <xsl:param>page.margin.inner=0.5in
+        # Margin size:
+        <xsl:param>page.margin.outer=0.5in
+        # Paper type = A4
+        <xsl:param>paper.type=A4
+        # Yes, we want graphics for admonishments:
+        <xsl:param>admon.graphics=1
+        # Set this one for PDF generation *only*:
+        # default pnd graphics are awful in PDF form,
+        # better use SVG's instead:
+        <format>pdf:<xsl:param>admon.graphics.extension=".svg"
+        <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
+        <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/utility/doc/html
+;
+
+using quickbook ;
+
+path-constant boost-images : ../../../doc/src/images ;
+
+xml declval : declval.qbk ;
+boostbook standalone
+    :
+        declval
+    :
+        # File name of HTML output:
+        <xsl:param>root.filename=declval
+        # How far down we chunk nested sections, basically all of them:
+        <xsl:param>chunk.section.depth=0
+        # Don't put the first section on the same page as the TOC:
+        <xsl:param>chunk.first.sections=0
+        # How far down sections get TOC's
+        <xsl:param>toc.section.depth=1
+        # Max depth in each TOC:
+        <xsl:param>toc.max.depth=1
+        # How far down we go with TOC's
+        <xsl:param>generate.section.toc.level=1
+        
+     ;
+
+
+
+
+
Added: trunk/libs/utility/doc/declval.qbk
==============================================================================
--- (empty file)
+++ trunk/libs/utility/doc/declval.qbk	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,104 @@
+[/
+ / Copyright (c) 2008 Howard Hinnant
+ / Copyright (c) 2008 Beman Dawes
+ / Copyright (c) 2009-20010 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)
+ /]
+
+[article Declval
+    [quickbook 1.5]
+    [authors [Hinnant, Howard]]
+    [authors [Dawes, Beman]]
+    [authors [Botet Escriba, Vicente J.]]
+    [copyright 2008 Howard Hinnant]
+    [copyright 2008 Beman Dawes]
+    [copyright 2009-2010 Vicente J. Botet Escriba]
+    [license
+        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])
+    ]
+]
+
+[/===============]
+[section Overview]
+[/===============]
+
+The motivation for `declval` was introduced in [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2958.html#Value N2958: 
+Moving Swap Forward]. Here follows a rewording of this chapter.
+
+With the provision of decltype, late-specified return types, and default template-arguments for function templates a 
+new generation of SFINAE patterns will emerge to at least partially compensate the lack of concepts on the C++0x timescale. 
+Using this technique, it is sometimes necessary to obtain an object of a known type in a non-using context, e.g. given the declaration 
+
+  template<class T>
+  T&& declval(); // not used
+  
+as part of the function template declaration 
+
+  template<class To, class From>
+  decltype(static_cast<To>(declval<From>())) convert(From&&);
+  
+or as part of a class template definition 
+
+  template<class> class result_of;
+
+  template<class Fn, class... ArgTypes>
+  struct result_of<Fn(ArgTypes...)> 
+  {
+    typedef decltype(declval<Fn>()(declval<ArgTypes>()...)) type;
+  };
+  
+The role of the function template declval() is a transformation of a type T into a value without using or evaluating this function. 
+The name is supposed to direct the reader's attention to the fact that the expression `declval<T>()` is an lvalue if and only if 
+T is an lvalue-reference, otherwise an rvalue. To extend the domain of this function we can do a bit better by changing its declaration to 
+
+  template<class T>
+  typename std::add_rvalue_reference<T>::type declval(); // not used
+  
+which ensures that we can also use cv void as template parameter. The careful reader might have noticed that `declval()` 
+already exists under the name create() as part of the definition of the semantics of the type trait is_convertible in the C==0x standard. 
+
+The provision of a new library component that allows the production of values in unevaluated expressions is considered as 
+important to realize constrained templates in C++0x where concepts are not available. 
+This extremely light-weight function is expected to be part of the daily tool-box of the C++0x programmer. 
+
+[endsect]
+
+
+[/=================]
+[section:reference Reference ]
+[/=================]
+
+`#include <boost/utility/declval.hpp>`
+
+    namespace boost {
+
+        template <typename T>
+        typename add_rvalue_reference<T>::type declval(); //noexcept; // as unevaluated operand
+
+    }  // namespace boost
+
+
+The library provides the function template declval to simplify the definition of expressions which occur as unevaluated operands.
+
+        template <typename T>
+        typename add_rvalue_reference<T>::type declval();
+
+[*Remarks:] If this function is used, the program is ill-formed.
+
+[*Remarks:] The template parameter T of declval may be an incomplete type.
+
+[*Example:]
+
+    template <class To, class From>
+    decltype(static_cast<To>(declval<From>())) convert(From&&);
+
+Declares a function template convert which only participats in overloading if the type From can be explicitly converted to type To. 
+
+[endsect]
+
+
+
Added: trunk/libs/utility/doc/html/declval.html
==============================================================================
--- (empty file)
+++ trunk/libs/utility/doc/html/declval.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -0,0 +1,163 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Declval</title>
+<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
+<link rel="home" href="declval.html" title="Declval">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav"></div>
+<div class="article" lang="en">
+<div class="titlepage">
+<div>
+<div><h2 class="title">
+<a name="declval"></a>Declval</h2></div>
+<div><div class="authorgroup">
+<div class="author"><h3 class="author">
+<span class="firstname">Howard</span> <span class="surname">Hinnant</span>
+</h3></div>
+<div class="author"><h3 class="author">
+<span class="firstname">Beman</span> <span class="surname">Dawes</span>
+</h3></div>
+<div class="author"><h3 class="author">
+<span class="firstname">Vicente J.</span> <span class="surname">Botet Escriba</span>
+</h3></div>
+</div></div>
+<div><p class="copyright">Copyright © 2008 Howard Hinnant</p></div>
+<div><p class="copyright">Copyright © 2008 Beman Dawes</p></div>
+<div><p class="copyright">Copyright © 2009 -2010 Vicente J. Botet Escriba</p></div>
+<div><div class="legalnotice">
+<a name="id879409"></a><p>
+        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)
+      </p>
+</div></div>
+</div>
+<hr>
+</div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section">Overview</span></dt>
+<dt><span class="section"> Reference </span></dt>
+</dl>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="declval.overview"></a><a class="link" href="declval.html#declval.overview" title="Overview">Overview</a>
+</h2></div></div></div>
+<p>
+      The motivation for <code class="computeroutput"><span class="identifier">declval</span></code>
+      was introduced in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2958.html#Value" target="_top">N2958:
+      Moving Swap Forward</a>. Here follows a rewording of this chapter.
+    </p>
+<p>
+      With the provision of decltype, late-specified return types, and default template-arguments
+      for function templates a new generation of SFINAE patterns will emerge to at
+      least partially compensate the lack of concepts on the C++0x timescale. Using
+      this technique, it is sometimes necessary to obtain an object of a known type
+      in a non-using context, e.g. given the declaration
+    </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
+<span class="identifier">T</span><span class="special">&&</span> <span class="identifier">declval</span><span class="special">();</span> <span class="comment">// not used
+</span></pre>
+<p>
+      as part of the function template declaration
+    </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">To</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">From</span><span class="special">></span>
+<span class="identifier">decltype</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">To</span><span class="special">>(</span><span class="identifier">declval</span><span class="special"><</span><span class="identifier">From</span><span class="special">>()))</span> <span class="identifier">convert</span><span class="special">(</span><span class="identifier">From</span><span class="special">&&);</span>
+</pre>
+<p>
+      or as part of a class template definition
+    </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">></span> <span class="keyword">class</span> <span class="identifier">result_of</span><span class="special">;</span>
+
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">ArgTypes</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">result_of</span><span class="special"><</span><span class="identifier">Fn</span><span class="special">(</span><span class="identifier">ArgTypes</span><span class="special">...)></span> 
+<span class="special">{</span>
+  <span class="keyword">typedef</span> <span class="identifier">decltype</span><span class="special">(</span><span class="identifier">declval</span><span class="special"><</span><span class="identifier">Fn</span><span class="special">>()(</span><span class="identifier">declval</span><span class="special"><</span><span class="identifier">ArgTypes</span><span class="special">>()...))</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+      The role of the function template declval() is a transformation of a type T
+      into a value without using or evaluating this function. The name is supposed
+      to direct the reader's attention to the fact that the expression <code class="computeroutput"><span class="identifier">declval</span><span class="special"><</span><span class="identifier">T</span><span class="special">>()</span></code> is
+      an lvalue if and only if T is an lvalue-reference, otherwise an rvalue. To
+      extend the domain of this function we can do a bit better by changing its declaration
+      to
+    </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
+<span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">declval</span><span class="special">();</span> <span class="comment">// not used
+</span></pre>
+<p>
+      which ensures that we can also use cv void as template parameter. The careful
+      reader might have noticed that <code class="computeroutput"><span class="identifier">declval</span><span class="special">()</span></code> already exists under the name create() as
+      part of the definition of the semantics of the type trait is_convertible in
+      the C==0x standard.
+    </p>
+<p>
+      The provision of a new library component that allows the production of values
+      in unevaluated expressions is considered as important to realize constrained
+      templates in C++0x where concepts are not available. This extremely light-weight
+      function is expected to be part of the daily tool-box of the C++0x programmer.
+    </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="declval.reference"></a><a class="link" href="declval.html#declval.reference" title="Reference"> Reference </a>
+</h2></div></div></div>
+<p>
+      <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">declval</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
+    </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+    <span class="keyword">typename</span> <span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">declval</span><span class="special">();</span> <span class="comment">//noexcept; // as unevaluated operand
+</span>
+<span class="special">}</span>  <span class="comment">// namespace boost
+</span></pre>
+<p>
+      The library provides the function template declval to simplify the definition
+      of expressions which occur as unevaluated operands.
+    </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+<span class="keyword">typename</span> <span class="identifier">add_rvalue_reference</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">declval</span><span class="special">();</span>
+</pre>
+<p>
+      <span class="bold"><strong>Remarks:</strong></span> If this function is used, the program
+      is ill-formed.
+    </p>
+<p>
+      <span class="bold"><strong>Remarks:</strong></span> The template parameter T of declval
+      may be an incomplete type.
+    </p>
+<p>
+      <span class="bold"><strong>Example:</strong></span>
+    </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">To</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">From</span><span class="special">></span>
+<span class="identifier">decltype</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">To</span><span class="special">>(</span><span class="identifier">declval</span><span class="special"><</span><span class="identifier">From</span><span class="special">>()))</span> <span class="identifier">convert</span><span class="special">(</span><span class="identifier">From</span><span class="special">&&);</span>
+</pre>
+<p>
+      Declares a function template convert which only participats in overloading
+      if the type From can be explicitly converted to type To.
+    </p>
+</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: September 16, 2010 at 16:19:10 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"></div>
+</body>
+</html>
Modified: trunk/libs/utility/index.html
==============================================================================
--- trunk/libs/utility/index.html	(original)
+++ trunk/libs/utility/index.html	2010-09-17 08:12:03 EDT (Fri, 17 Sep 2010)
@@ -22,7 +22,8 @@
                                 <a href="checked_delete.html">checked_delete</a><br>
                                 <a href="compressed_pair.htm">compressed_pair</a><br>
                                 <a href="current_function.html">current_function</a><br>
-				enable_if<br>
+            declval<br>
+            enable_if<br>
                                 <a href="in_place_factories.html">in_place_factory</a><br>
             <a href="iterator_adaptors.htm">iterator_adaptors</a><br>
             <a href="generator_iterator.htm">generator iterator adaptors</a><br>
@@ -33,7 +34,8 @@
                                 <a href="swap.html">swap</a><br>
                                 <a href="throw_exception.html">throw_exception</a><br>
                                 <a href="utility.htm">utility</a><br>
-                value_init</p>
+            value_init
+         </p>
                 </blockquote>
                 <hr>
                 <p>© Copyright Beman Dawes, 2001</p>