Boost logo

Boost-Commit :

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&#160;1.1.&#160;Time taken to copy 1000 elements using `copy&lt;const T*, T*&gt;` (times
+<a name="id908374"></a><p class="title"><b>Table&#160;1.1.&#160;Time taken to copy 1000 elements using `copy&lt;const T*, T*&gt;` (times
       in micro-seconds)</b></p>
 <div class="table-contents"><table class="table" summary="Time taken to copy 1000 elements using `copy&lt;const T*, T*&gt;` (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&#160;1.2.&#160;Required Constructor Argument Types</b></p>
+<a name="id908786"></a><p class="title"><b>Table&#160;1.2.&#160;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&#160;1.3.&#160;Using add_reference to synthesize the correct constructor type</b></p>
+<a name="id908894"></a><p class="title"><b>Table&#160;1.3.&#160;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">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</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">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">T</span><span class="special">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</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&#160;1.&#160;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">&lt;</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">&gt;</span>
+<span class="keyword">typename</span> <a class="link" href="../reference/common_type.html" title="common_type">common_type</a><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;::</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">&lt;</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 &#169; 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&#160;1.&#160;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&#160;1.4.&#160;Macros for Compiler Intrinsics</b></p>
+<a name="id915555"></a><p class="title"><b>Table&#160;1.4.&#160;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&#160;1.&#160;Boost.TypeTraits">
 <link rel="up" href="../index.html" title="Chapter&#160;1.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1058110"></a><p class="title"><b>Table&#160;1.5.&#160;Examples</b></p>
+<a name="id921834"></a><p class="title"><b>Table&#160;1.5.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1058587"></a><p class="title"><b>Table&#160;1.6.&#160;Examples</b></p>
+<a name="id922312"></a><p class="title"><b>Table&#160;1.6.&#160;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&#160;1.&#160;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">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</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">&amp;</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">&amp;</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">&lt;</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">&gt;</span></code>
+ or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p>
+<div class="table">
+<a name="id922834"></a><p class="title"><b>Table&#160;1.7.&#160;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">&lt;</span><span class="keyword">int</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special">&lt;</span><span class="keyword">int</span>
+ <span class="keyword">const</span><span class="special">&amp;&gt;::</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">&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">*&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span><span class="special">*&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">*&amp;&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span><span class="special">*&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&amp;&amp;&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_lvalue_reference</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">&gt;::</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 &#169; 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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1059719"></a><p class="title"><b>Table&#160;1.8.&#160;Examples</b></p>
+<a name="id923444"></a><p class="title"><b>Table&#160;1.8.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1060217"></a><p class="title"><b>Table&#160;1.9.&#160;Examples</b></p>
+<a name="id923942"></a><p class="title"><b>Table&#160;1.9.&#160;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&#160;1.&#160;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">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</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">&amp;&amp;</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&amp;, the type <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</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">&lt;</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">&gt;</span></code>
+ or <code class="computeroutput"> <span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p>
+<div class="table">
+<a name="id924446"></a><p class="title"><b>Table&#160;1.10.&#160;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">&lt;</span><span class="keyword">int</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span><span class="special">&amp;&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special">&lt;</span><span class="keyword">int</span>
+ <span class="keyword">const</span><span class="special">&amp;&gt;::</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">&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">*&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span><span class="special">*&amp;&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">*&amp;&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span><span class="special">*&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&amp;&amp;&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span><span class="special">&amp;&amp;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">add_rvalue_reference</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">&gt;::</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 &#169; 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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1061289"></a><p class="title"><b>Table&#160;1.11.&#160;Examples</b></p>
+<a name="id925014"></a><p class="title"><b>Table&#160;1.11.&#160;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&#160;1.&#160;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&#160;1.&#160;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">&lt;</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">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">;</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</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">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">V</span><span class="special">...&gt;::</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">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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">&lt;</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">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">decltype</span><span class="special">(</span>declval<span class="special">&lt;</span><span class="keyword">bool</span><span class="special">&gt;()</span> <span class="special">?</span> declval<span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;()</span> <span class="special">:</span> declval<span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;())</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">&lt;</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">&gt;</span>
+<span class="identifier">complex</span><span class="special">&lt;</span><span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+<span class="keyword">operator</span><span class="special">+(</span><span class="identifier">complex</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span> <span class="identifier">complex</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;);</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">&lt;</span><span class="keyword">float</span><span class="special">&gt;</span></code> and <code class="computeroutput"><span class="identifier">complex</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span></code> might be a <code class="computeroutput"><span class="identifier">complex</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special">&lt;</span><span class="identifier">T</span><span class="special">...&gt;::</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">&lt;</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">&gt;</span>
+<span class="keyword">typename</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special">&lt;</span><span class="identifier">complex</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span> <span class="identifier">complex</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="keyword">operator</span><span class="special">+(</span><span class="identifier">complex</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span> <span class="identifier">complex</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;);</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">&lt;</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">&gt;</span>
+<span class="keyword">struct</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special">&lt;</span><span class="identifier">complex</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span> <span class="identifier">complex</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">complex</span><span class="special">&lt;</span> <a class="link" href="common_type.html" title="common_type">common_type</a><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="special">&gt;</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&lt;&gt; 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">&lt;</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">&gt;::</span><span class="identifier">type</span></code> is not equivalent to <code class="computeroutput"><span class="identifier">common_type</span><span class="special">&lt;</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">&gt;::</span><span class="identifier">type</span></code>, but to <code class="computeroutput"><span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span><span class="identifier">B</span><span class="special">
&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">C</span><span class="special">&gt;::</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">&amp;)</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">&amp;)</span> <span class="special">{}</span>
+ <span class="identifier">C</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">C</span> <span class="keyword">const</span><span class="special">&amp;)</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">&lt;</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">&gt;::</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">&lt;</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">&gt;::</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">&lt;</span><span class="identifier">A</span><span class="special">,</span><span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ is undefined, <code class="computeroutput"><span class="identifier">common_type</span><span class="special">&lt;</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">&gt;::</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">&lt;</span><span class="identifier">A</span><span class="special">,</span>
+ <span class="identifier">B</span><span class="special">&gt;</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">&lt;&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;</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">&lt;</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">&gt;</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">&lt;</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">&gt;</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">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">A</span><span class="special">&gt;</span>
+<span class="special">:</span> <span class="keyword">public</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;</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">&lt;</span><span class="identifier">A</span><span class="special">,</span>
+ <span class="identifier">B</span><span class="special">&gt;</span></code>
+ is not be used implicitly for <code class="computeroutput"><span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">,</span>
+ <span class="identifier">A</span><span class="special">&gt;</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">&lt;</span><span class="identifier">A</span><span class="special">,</span><span class="identifier">B</span><span class="special">&gt;::</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">&lt;&gt;</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">&lt;</span><span class="identifier">A</span><span class="special">,</span>
+ <span class="identifier">B</span><span class="special">&gt;</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">&lt;&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;</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">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">A</span><span class="special">&gt;</span>
+<span class="special">:</span> <span class="keyword">public</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;</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">&lt;</span><span class="identifier">A</span><span class="special">,</span>
+ <span class="identifier">B</span><span class="special">&gt;</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">&lt;</span><span class="identifier">A</span><span class="special">*,</span><span class="identifier">B</span><span class="special">*&gt;::</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">&lt;</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">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">*,</span> <span class="identifier">B</span><span class="special">*&gt;</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;*</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">&lt;</span><span class="keyword">bool</span><span class="special">&gt;()</span>
+ <span class="special">?</span> declval<span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;()</span>
+ <span class="special">:</span> declval<span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;())</span></code>
+ </p>
+<p>
+ <a class="link" href="common_type.html" title="common_type">common_type</a>
+ is also similar to promote_args&lt;class ...T&gt; 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>&lt;T1,
+ T2&gt;::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 &#169; 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&#160;1.&#160;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">&lt;</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">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">;</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</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">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</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">&gt;</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">__common_type__</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">__common_type__</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">V</span><span class="special">...&gt;::</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">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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">&lt;</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">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;</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">&lt;</span><span class="keyword">bool</span><span class="special">&gt;()</span> <span class="special">?</span> <span class="identifier">__declval__</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;()</span> <span class="special">:</span> <span class="identifier">__declval__</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;())</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 &#169; 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&#160;1.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1064172"></a><p class="title"><b>Table&#160;1.12.&#160;Examples</b></p>
+<a name="id930714"></a><p class="title"><b>Table&#160;1.12.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1065724"></a><p class="title"><b>Table&#160;1.13.&#160;Examples</b></p>
+<a name="id933358"></a><p class="title"><b>Table&#160;1.13.&#160;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&#160;1.14.&#160;Function Traits Members</b></p>
+<a name="id933731"></a><p class="title"><b>Table&#160;1.14.&#160;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&#160;1.15.&#160;Examples</b></p>
+<a name="id933949"></a><p class="title"><b>Table&#160;1.15.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1071961"></a><p class="title"><b>Table&#160;1.16.&#160;Examples</b></p>
+<a name="id940687"></a><p class="title"><b>Table&#160;1.16.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1093886"></a><p class="title"><b>Table&#160;1.17.&#160;Examples</b></p>
+<a name="id961588"></a><p class="title"><b>Table&#160;1.17.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1094368"></a><p class="title"><b>Table&#160;1.18.&#160;Examples</b></p>
+<a name="id962071"></a><p class="title"><b>Table&#160;1.18.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1094893"></a><p class="title"><b>Table&#160;1.19.&#160;Examples</b></p>
+<a name="id963756"></a><p class="title"><b>Table&#160;1.19.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1097629"></a><p class="title"><b>Table&#160;1.20.&#160;Examples</b></p>
+<a name="id964853"></a><p class="title"><b>Table&#160;1.20.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1098172"></a><p class="title"><b>Table&#160;1.21.&#160;Examples</b></p>
+<a name="id965396"></a><p class="title"><b>Table&#160;1.21.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1098703"></a><p class="title"><b>Table&#160;1.22.&#160;Examples</b></p>
+<a name="id967020"></a><p class="title"><b>Table&#160;1.22.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1099232"></a><p class="title"><b>Table&#160;1.23.&#160;Examples</b></p>
+<a name="id967549"></a><p class="title"><b>Table&#160;1.23.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1099787"></a><p class="title"><b>Table&#160;1.24.&#160;Examples</b></p>
+<a name="id968103"></a><p class="title"><b>Table&#160;1.24.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1100299"></a><p class="title"><b>Table&#160;1.25.&#160;Examples</b></p>
+<a name="id968616"></a><p class="title"><b>Table&#160;1.25.&#160;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">&lt;</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">&gt;</span></code>
       </p>
 <div class="table">
-<a name="id1100801"></a><p class="title"><b>Table&#160;1.26.&#160;Examples</b></p>
+<a name="id969118"></a><p class="title"><b>Table&#160;1.26.&#160;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 &#169; 2008 Howard Hinnant</p></div>
+<div><p class="copyright">Copyright &#169; 2008 Beman Dawes</p></div>
+<div><p class="copyright">Copyright &#169; 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">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="identifier">T</span><span class="special">&amp;&amp;</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">&lt;</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">&gt;</span>
+<span class="identifier">decltype</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">To</span><span class="special">&gt;(</span><span class="identifier">declval</span><span class="special">&lt;</span><span class="identifier">From</span><span class="special">&gt;()))</span> <span class="identifier">convert</span><span class="special">(</span><span class="identifier">From</span><span class="special">&amp;&amp;);</span>
+</pre>
+<p>
+ or as part of a class template definition
+ </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">result_of</span><span class="special">;</span>
+
+<span class="keyword">template</span><span class="special">&lt;</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">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">Fn</span><span class="special">(</span><span class="identifier">ArgTypes</span><span class="special">...)&gt;</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">&lt;</span><span class="identifier">Fn</span><span class="special">&gt;()(</span><span class="identifier">declval</span><span class="special">&lt;</span><span class="identifier">ArgTypes</span><span class="special">&gt;()...))</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">&lt;</span><span class="identifier">T</span><span class="special">&gt;()</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">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</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">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</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">&lt;</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">&gt;</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">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">add_rvalue_reference</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</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">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">add_rvalue_reference</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</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">&lt;</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">&gt;</span>
+<span class="identifier">decltype</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">To</span><span class="special">&gt;(</span><span class="identifier">declval</span><span class="special">&lt;</span><span class="identifier">From</span><span class="special">&gt;()))</span> <span class="identifier">convert</span><span class="special">(</span><span class="identifier">From</span><span class="special">&amp;&amp;);</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>&copy; Copyright Beman Dawes, 2001</p>


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