Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r73711 - in sandbox/conversion/boost/conversion: . boost detail std type_traits type_traits/boost type_traits/boost/chrono type_traits/boost/fusion type_traits/boost/numeric type_traits/detail type_traits/std
From: vicente.botet_at_[hidden]
Date: 2011-08-13 05:31:19


Author: viboes
Date: 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
New Revision: 73711
URL: http://svn.boost.org/trac/boost/changeset/73711

Log:
conversion: a lot of changes going on for a concept based library allowing overloading of the provided functions.

Added:
   sandbox/conversion/boost/conversion/detail/any.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/dummy_size.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/is_extrinsically_assignable_tagged.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/is_extrinsically_convertible_tagged.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/is_extrinsically_explicit_convertible_or_fallback_tagged.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/is_extrinsically_explicit_convertible_tagged.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/is_extrinsically_try_assignable_tagged.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/is_extrinsically_try_convertible_tagged.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/nat.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/detail/yes_no_types.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/detail/
   sandbox/conversion/boost/conversion/type_traits/detail/any.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/detail/dummy_size.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/detail/nat.hpp (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/detail/yes_no_types.hpp (contents, props changed)
Removed:
   sandbox/conversion/boost/conversion/is_extrinsically_assignable_tagged.hpp
   sandbox/conversion/boost/conversion/is_extrinsically_convertible_tagged.hpp
   sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible2.hpp
   sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible_tagged.hpp
Text files modified:
   sandbox/conversion/boost/conversion/assign_to.hpp | 210 +++++++++++---------
   sandbox/conversion/boost/conversion/assignable_to.hpp | 5
   sandbox/conversion/boost/conversion/boost/chrono_duration_to_posix_time_duration.hpp | 31 --
   sandbox/conversion/boost/conversion/boost/chrono_time_point_to_posix_time_ptime.hpp | 30 --
   sandbox/conversion/boost/conversion/boost/interval.hpp | 4
   sandbox/conversion/boost/conversion/boost/optional.hpp | 6
   sandbox/conversion/boost/conversion/boost/rational.hpp | 4
   sandbox/conversion/boost/conversion/boost/tuple.hpp | 4
   sandbox/conversion/boost/conversion/config.hpp | 2
   sandbox/conversion/boost/conversion/convert_to_or_fallback.hpp | 76 ++++---
   sandbox/conversion/boost/conversion/convertible_from.hpp | 24 +
   sandbox/conversion/boost/conversion/explicit_convert_to.hpp | 79 ++++---
   sandbox/conversion/boost/conversion/implicit_convert_to.hpp | 21 +
   sandbox/conversion/boost/conversion/include.hpp | 2
   sandbox/conversion/boost/conversion/is_extrinsically_assignable.hpp | 213 +++++++++++++++++++-
   sandbox/conversion/boost/conversion/is_extrinsically_convertible.hpp | 205 +++++++++----------
   sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible.hpp | 220 ++++++++++-----------
   sandbox/conversion/boost/conversion/std/pair.hpp | 4
   sandbox/conversion/boost/conversion/std/vector.hpp | 4
   sandbox/conversion/boost/conversion/try_assign_to.hpp | 105 +++++++--
   sandbox/conversion/boost/conversion/try_convert_to.hpp | 74 +++++--
   sandbox/conversion/boost/conversion/type_traits/boost/array.hpp | 2
   sandbox/conversion/boost/conversion/type_traits/boost/chrono/duration.hpp | 8
   sandbox/conversion/boost/conversion/type_traits/boost/chrono/time_point.hpp | 8
   sandbox/conversion/boost/conversion/type_traits/boost/fusion/tuple.hpp | 18
   sandbox/conversion/boost/conversion/type_traits/boost/numeric/interval.hpp | 8
   sandbox/conversion/boost/conversion/type_traits/boost/optional.hpp | 8
   sandbox/conversion/boost/conversion/type_traits/boost/rational.hpp | 8
   sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp | 407 +++++++++++++++++++--------------------
   sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp | 310 +++++++++++++++---------------
   sandbox/conversion/boost/conversion/type_traits/is_convertible.hpp | 16
   sandbox/conversion/boost/conversion/type_traits/is_copy_assignable.hpp | 2
   sandbox/conversion/boost/conversion/type_traits/is_copy_constructible.hpp | 2
   sandbox/conversion/boost/conversion/type_traits/is_default_constructible.hpp | 2
   sandbox/conversion/boost/conversion/type_traits/is_destructible.hpp | 58 ++---
   sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp | 67 ++---
   sandbox/conversion/boost/conversion/type_traits/is_move_assignable.hpp | 5
   sandbox/conversion/boost/conversion/type_traits/is_move_constructible.hpp | 5
   sandbox/conversion/boost/conversion/type_traits/std/complex.hpp | 12
   sandbox/conversion/boost/conversion/type_traits/std/utility.hpp | 14
   sandbox/conversion/boost/conversion/type_traits/std/vector.hpp | 12
   41 files changed, 1264 insertions(+), 1031 deletions(-)

Modified: sandbox/conversion/boost/conversion/assign_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/assign_to.hpp (original)
+++ sandbox/conversion/boost/conversion/assign_to.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -8,28 +8,19 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 
-/*!
- @file
- @brief
- Defines the free function @c assign_to and its customization point @c assigner.
-
-The function @c assign_to assigns the @c from parameter to the @c to parameter.
-
+/**
+ * @file
+ * @brief
+ * Defines the free function @c assign_to and its customization point @c assigner.
+ *
+ * The function @c assign_to assigns the @c from parameter to the @c to parameter.
+ *
  */
+
 #ifndef BOOST_CONVERSION_ASSIGN_TO_HPP
 #define BOOST_CONVERSION_ASSIGN_TO_HPP
-/**
-A user adapting another type could need to specialize the @c assign_to free function if the default behavior is not satisfactory.
-The user can add the @c assign_to overloading on the namespace of the Source or Target classes.
-But sometimes as it is the case for the standard classes, we can not add new functions on the std namespace,
-so we need a different technique. The technique consists in partially specialize on the function @c assign_to on
-the @c boost::conversion::overload_workaround namespace.
-
- */
 
 #include <boost/conversion/config.hpp>
-
-
 #include <cstddef> //for std::size_t
 #include <boost/conversion/config.hpp>
 #include <boost/conversion/convert_to.hpp>
@@ -38,37 +29,42 @@
 #include <boost/conversion/type_traits/is_assignable.hpp>
 #include <boost/conversion/is_extrinsically_convertible.hpp>
 #include <boost/conversion/is_extrinsically_explicit_convertible.hpp>
+#include <boost/type_traits/add_reference.hpp>
 
 namespace boost {
   namespace conversion {
 
-
- //! Customization point for @c assign_to.
- //!
- //! @tparam Target target type of the conversion.
- //! @tparam Source source type of the conversion.
- //! @tparam Enable A dummy template parameter that can be used for SFINAE.
- //!
- //! This class must be specialized by the user when the default behavior of @c assigner is not satisfying.
- template < typename Target, typename Source, class Enable = void>
+ /** Customization point for @c assign_to.
+ *
+ * @tparam Target target type of the conversion.
+ * @tparam Source source type of the conversion.
+ * @tparam Enable A dummy template parameter that can be used for SFINAE.
+ *
+ * This class must be specialized by the user when the default behavior of
+ * @c assigner is not satisfying.
+ */
+ template < typename Target, typename Source, typename Enable = void>
     struct assigner_cp : false_type {};
 
- //! Default customization point for @c assign_to.
- //!
- //! @tparam Target target type of the conversion.
- //! @tparam Source source type of the conversion.
- //! @tparam Enable A dummy template parameter that can be used for SFINAE.
- //!
- //! By default it delegates to the user @c assigner_cp.
- template < typename Target, typename Source, class Enable = void>
+ /** Default customization point for @c assign_to.
+ *
+ * @tparam Target target type of the conversion.
+ * @tparam Source source type of the conversion.
+ * @tparam Enable A dummy template parameter that can be used for SFINAE.
+ *
+ * By default it delegates to the user @c assigner_cp.
+ */
+ template < typename Target, typename Source, typename Enable = void>
     struct assigner : assigner_cp<Target,Source,Enable> {};
 
     /**
- * Specialization when @c Target is not assignable from @c Source, but @c Target is copy constructible and @c Source is extrinsic convertible to @c Target.
- //!
- //! @tparam Target target type of the conversion.
- //! @tparam Source source type of the conversion.
- //!
+ * Specialization when @c Target is not assignable from @c Source, but
+ * @c Target is copy constructible and @c Source is extrinsic convertible to
+ * @c Target.
+ *
+ * @tparam Target target type of the conversion.
+ * @tparam Source source type of the conversion.
+ *
      * @Requires @c Target must be CopyAssinable and @c @c Source must be extrinsic convertible to @c Target.
      */
     template < typename Target, typename Source>
@@ -88,14 +84,19 @@
 #endif
> : true_type
     {
- //! @Effects Converts the @c from parameter to the @c to parameter, using by default the assignment operator.
- //! @Throws Whatever the underlying assignment operator of the @c Target class throws.
+ /**
+ * @Effects Converts the @c from parameter to the @c to parameter, using
+ * by default the assignment operator.
+ * @Throws Whatever the underlying assignment operator of the @c Target
+ * class throws.
+ */
       Target& operator()(Target& to, const Source& from)
       {
         to = ::boost::conversion::explicit_convert_to<Target>(from);
         return to;
       }
     };
+
     /**
      * Specialization when @c Target is assignable from @c Source.
      *
@@ -116,8 +117,11 @@
 #endif
> : true_type
     {
- //! @Effects Assigns the @c from parameter to the @c to parameter.
- //! @Throws Whatever the underlying assignment operator of the @c Target class throws.
+ /**
+ * @Effects Assigns the @c from parameter to the @c to parameter.
+ * @Throws Whatever the underlying assignment operator of the @c Target
+ * class throws.
+ */
       Target& operator()(Target& to, const Source& from)
       {
         to = from;
@@ -146,9 +150,15 @@
 #endif
> : true_type
     {
- //! @Effects Converts the @c from parameter to the @c to parameter, using by default the assignment operator on each one of the array elements.
- //! @Throws Whatever the underlying assignment operator of the @c Target class throws.
- //! @Basic
+ /**
+ * @Effects Converts the @c from parameter to the @c to parameter,
+ * using by default the assignment operator on each one of the array
+ * elements.
+ * @Throws Whatever the underlying assignment operator of the @c Target
+ * class throws.
+ * @Basic
+ *
+ */
       Target*& operator()(Target(&to)[N], const Source(& from)[N])
       {
         for (std::size_t i = 0; i < N; ++i)
@@ -166,44 +176,56 @@
      * @tparam Source source type of the conversion.
      * @tparam N the size of the c-arrays.
      *
- * @Requires @c Target must be CopyAssinable and @c @c Source must be extrinsic convertible to @c Target.
+ * @Requires @c Target must be CopyAssinable and @c @c Source must be
+ * extrinsic convertible to @c Target.
      */
     template < typename Target, typename Source, std::size_t N >
     struct assigner<Target[N],Source[N]
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
- , requires(CopyAssignable<Target> && ExtrinsicallyConvertible<Source,Target>)
+ , requires(
+ CopyAssignable<Target>
+ && ExtrinsicallyConvertible<Source,Target>
+ )
 #else
- , typename enable_if_c<
- is_copy_assignable<Target>::value
- && is_extrinsically_convertible<Source,Target>::value
- && ! is_assignable<Target,Source>::value
- >::type
+ , typename enable_if_c<
+ is_copy_assignable<Target>::value
+ && is_extrinsically_convertible<Source,Target>::value
+ && ! is_assignable<Target,Source>::value
+ >::type
 #endif
> : true_type
     {
- //! @Effects Converts the @c from parameter to the @c to parameter, using by default the assignment operator on each one of the array elements.
- //! @Throws Whatever the underlying assignment operator of the @c Target class throws.
- //! @Basic
+ /**
+ * @Effects Converts the @c from parameter to the @c to parameter, using
+ * by default the assignment operator on each one of the array elements.
+ * @Throws Whatever the underlying assignment operator of the @c Target
+ * class throws.
+ * @Basic
+ *
+ */
       Target*& operator()(Target(&to)[N], const Source(& from)[N])
       {
         for (std::size_t i = 0; i < N; ++i)
         {
- to[i] = ::boost::conversion::implicit_convert_to<Target>(from[i]);
+ to[i] = conversion::implicit_convert_to<Target>(from[i]);
         }
         return to;
       }
     };
-
   }
 
 #if !defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
   namespace conversion_impl_2 {
 
- //! @brief Default @c assign_to overload, used when ADL fails.
- //!
- //! @Effects Converts the @c from parameter to the @c to parameter, using by default the assignment operator.
- //! @Throws Whatever the underlying the assignment operator of the @c Target class throws.
- //! Forwards the call to the overload workaround, which can yet be specialized by the user for standard C++ types.
+ /** @brief Default @c assign_to overload, used when ADL fails.
+ *
+ * @Effects Converts the @c from parameter to the @c to parameter, using
+ * by default the assignment operator.
+ * @Throws Whatever the underlying the assignment operator of the @c Target
+ * class throws.
+ * Forwards the call to the overload workaround, which can yet be
+ * specialized by the user for standard C++ types.
+ */
     template < typename Target, typename Source >
     typename enable_if_c<
       conversion::assigner<Target,Source>::value
@@ -214,20 +236,19 @@
     }
   }
 #endif
-
-
 }
 
-#include <boost/conversion/is_extrinsically_assignable_tagged.hpp>
+#include <boost/conversion/detail/is_extrinsically_assignable_tagged.hpp>
 
 namespace boost {
 #if !defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
   namespace conversion_impl {
     template <typename Target, typename Source>
- Target&
- //typename enable_if_c<
- // is_extrinsically_assignable_tagged<Source,Target>::value
- //, Target&>::type
+ typename enable_if_c<
+ //true
+ conversion::is_extrinsically_assignable_tagged<Target,Source>::value
+ , Target&
+ >::type
     assign_to_impl(Target& to, const Source& from)
     {
       using namespace boost::conversion_impl_2;
@@ -236,33 +257,36 @@
     }
   }
 #endif
- namespace conversion {
 
- //! @brief Extrinsic assign function.
- //! Assigns the @c Source parameter to the @c Target one.
- //! This function can be seen as an emulation of free function overload of the assignment operator.
- //! @tparam Target target type of the conversion.
- //! @tparam Source source type of the conversion.
- //!
- //! @Params
- //! @Param{to,target of the conversion}
- //! @Param{from,source of the conversion}
-
- //! @Effects The ones of the assigner customization point.
- //! @Throws Whatever the assigner customization point throws.
- //! @Example
- //! @code
- //! Target t;
- //! Source s;
- //! boost::conversion::assign_to(t,s);
- //! @endcode
+ namespace conversion {
 
+ /** @brief Extrinsic assign function.
+ *
+ * Assigns the @c Source parameter to the @c Target one.
+ * This function can be seen as an emulation of free function overload of
+ * the assignment operator.
+ * @tparam Target target type of the conversion.
+ * @tparam Source source type of the conversion.
+ *
+ * @Params
+ * @Param{to,target of the conversion}
+ * @Param{from,source of the conversion}
+ *
+ * @Effects The ones of the assigner customization point.
+ * @Throws Whatever the assigner customization point throws.
+ * @Example
+ * @code
+ * Target t;
+ * Source s;
+ * boost::conversion::assign_to(t,s);
+ * @endcode
+ */
 
     template <typename Target, typename Source>
- Target&
- //typename enable_if_c<
- // is_extrinsically_assignable_tagged<Source,Target>::value
- //, Target&>::type
+ typename enable_if_c<
+ is_extrinsically_assignable_tagged<Target,Source>::value
+ , Target&
+ >::type
     assign_to(Target& to, const Source& from)
     {
       return boost::conversion_impl::assign_to_impl<Target, Source>(to, from);

Modified: sandbox/conversion/boost/conversion/assignable_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/assignable_to.hpp (original)
+++ sandbox/conversion/boost/conversion/assignable_to.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -11,8 +11,7 @@
 
 /*!
  @file
- @brief
- Defines the free function @c lvalue.
+ @brief Defines the free function @c assignable_to class and the factory @c lvalue.
  */
 #ifndef BOOST_CONVERSION_ASSIGNABLE_TO_HPP
 #define BOOST_CONVERSION_ASSIGNABLE_TO_HPP
@@ -90,7 +89,7 @@
     };
     //! makes an assignable to @c Target which accepts assignment from any type that is extrinsic assignable to @c Target.
 
- //! The result is able to transform conversion by convert_to calls and assignments by assign_to calls.
+ //! The result is able to transform assignments by assign_to calls.
     //! @NoThrow.
     template <typename Target>
     assignable_to<Target> lvalue(Target& r)

Modified: sandbox/conversion/boost/conversion/boost/chrono_duration_to_posix_time_duration.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/chrono_duration_to_posix_time_duration.hpp (original)
+++ sandbox/conversion/boost/conversion/boost/chrono_duration_to_posix_time_duration.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -31,38 +31,11 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_chrono_duration{};
 #endif
-//#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-// template <> struct is_constructible< posix_time::time_duration > : true_type {};
-//#endif
-//#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-// template <> struct is_constructible< posix_time::time_duration, posix_time::time_duration const& > : true_type {};
-//#endif
-//#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-// template <> struct is_assignable< posix_time::time_duration&, posix_time::time_duration const& > : true_type {};
-// template <> struct is_assignable< posix_time::time_duration, posix_time::time_duration > : true_type {};
-//#endif
-
-
-//#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-// template < class Rep, class Period >
-// struct is_constructible< chrono::duration<Rep, Period> > : true_type {};
-//#endif
-//#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-// template < class Rep, class Period >
-// struct is_constructible< chrono::duration<Rep, Period>, chrono::duration<Rep, Period> > : true_type {};
-//#endif
-//#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-// template < class Rep, class Period >
-// struct is_assignable< chrono::duration<Rep, Period>&, chrono::duration<Rep, Period> const& > : true_type {};
-// template < class Rep, class Period >
-// struct is_assignable< chrono::duration<Rep, Period>, chrono::duration<Rep, Period> > : true_type {};
-//#endif
-
   
   namespace conversion {
     //! @brief @c implicit_converter specialization for conversions from @c boost::chrono::duration<> to @c boost::posix_time::time_duration.
     //!
- template < class Rep, class Period>
+ template < typename Rep, typename Period>
     struct implicit_converter_cp<posix_time::time_duration, chrono::duration<Rep, Period>
> : true_type
     {
@@ -86,7 +59,7 @@
     //! @brief @c implicit_converter specialization for conversions from @c boost::posix_time::time_duration to @c boost::chrono::duration<>.
     //!
 
- template < class Rep, class Period>
+ template < typename Rep, typename Period>
     struct implicit_converter_cp<chrono::duration<Rep, Period>, posix_time::time_duration
> : true_type
     {

Modified: sandbox/conversion/boost/conversion/boost/chrono_time_point_to_posix_time_ptime.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/chrono_time_point_to_posix_time_ptime.hpp (original)
+++ sandbox/conversion/boost/conversion/boost/chrono_time_point_to_posix_time_ptime.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -32,36 +32,10 @@
     //! trick to generate the doc. Don't take care of it
     struct trick_chrono_time_point{};
   #endif
-//#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-// template <> struct is_constructible< boost::posix_time::ptime > : true_type {};
-//#endif
-//#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-// template <> struct is_constructible< boost::posix_time::ptime, boost::posix_time::ptime const& > : true_type {};
-//#endif
-//#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-// template <> struct is_assignable< boost::posix_time::ptime&, boost::posix_time::ptime const& > : true_type {};
-// template <> struct is_assignable< boost::posix_time::ptime, boost::posix_time::ptime > : true_type {};
-//#endif
-//
-//
-//#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-// template < class Clock, class Duration>
-// struct is_constructible< chrono::time_point<Clock, Duration> > : true_type {};
-//#endif
-//#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-// template < class Clock, class Duration>
-// struct is_constructible< chrono::time_point<Clock, Duration>, chrono::time_point<Clock, Duration> > : true_type {};
-//#endif
-//#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-// template < class Clock, class Duration>
-// struct is_assignable< chrono::time_point<Clock, Duration>&, chrono::time_point<Clock, Duration> const& > : true_type {};
-// template < class Clock, class Duration>
-// struct is_assignable< chrono::time_point<Clock, Duration>, chrono::time_point<Clock, Duration> > : true_type {};
-//#endif
   
   namespace conversion {
 
- template < class Clock, class Duration>
+ template < typename Clock, typename Duration>
     struct implicit_converter_cp<posix_time::ptime, chrono::time_point<Clock, Duration>
> : true_type
     {
@@ -83,7 +57,7 @@
       }
     };
 
- template < class Clock, class Duration>
+ template < typename Clock, typename Duration>
     struct implicit_converter_cp<chrono::time_point<Clock, Duration>, posix_time::ptime
> : true_type
     {

Modified: sandbox/conversion/boost/conversion/boost/interval.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/interval.hpp (original)
+++ sandbox/conversion/boost/conversion/boost/interval.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -31,7 +31,7 @@
 
     //! @brief @c implicit_converter specialization for source and target been @c boost::numeric::interval.
     //!
- template < class Target, class PTarget, class Source, class PSource>
+ template < typename Target, typename PTarget, typename Source, typename PSource>
     struct implicit_converter_cp< numeric::interval<Target,PTarget>, numeric::interval<Source,PSource>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(
@@ -50,7 +50,7 @@
         return numeric::interval<Target,PTarget>(boost::conversion::implicit_convert_to<Target>(from.lower()), boost::conversion::implicit_convert_to<Source>(from.upper()));
       }
     };
- template < class Target, class PTarget, class Source, class PSource>
+ template < typename Target, typename PTarget, typename Source, typename PSource>
     struct assigner_cp< numeric::interval<Target,PTarget>, numeric::interval<Source,PSource>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(

Modified: sandbox/conversion/boost/conversion/boost/optional.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/optional.hpp (original)
+++ sandbox/conversion/boost/conversion/boost/optional.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -39,7 +39,7 @@
     /**
      * Partial specialization of @c implicit_converter for boost::optional
      */
- template < class Target, class Source>
+ template < typename Target, typename Source>
     struct implicit_converter_cp
     < optional<Target>, optional<Source>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
@@ -65,7 +65,7 @@
     //! @brief @c implicit_converter specialization to try to convert the source to @c Target::value_type when @c Target is optional.
     //!
     //! We can see this specialization as a try_convert_to function.
- template < class Target, class Source>
+ template < typename Target, typename Source>
     struct implicit_converter_cp< optional<Target>, Source
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(
@@ -100,7 +100,7 @@
     //! @brief @c explicit converter specialization to try to convert the source to @c Target::value_type when @c Target is optional.
     //!
     //! We can see this specialization as a try_convert_to function.
- template < class Target, class Source>
+ template < typename Target, typename Source>
     struct explicit_converter_cp< optional<Target>, Source
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(

Modified: sandbox/conversion/boost/conversion/boost/rational.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/rational.hpp (original)
+++ sandbox/conversion/boost/conversion/boost/rational.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -36,7 +36,7 @@
 
     //! @brief @c implicit_converter specialization for source and target been @c boost::rational.
     //!
- template < class Target, class Source>
+ template < typename Target, typename Source>
     struct implicit_converter_cp< rational<Target>, rational<Source>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(
@@ -55,7 +55,7 @@
         return rational<Target>(boost::conversion::convert_to<Target>(from.numerator()), boost::conversion::convert_to<Target>(from.denominator()));
       }
     };
- template < class Target, class Source>
+ template < typename Target, typename Source>
     struct assigner_cp< rational<Target>, rational<Source>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(

Modified: sandbox/conversion/boost/conversion/boost/tuple.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/tuple.hpp (original)
+++ sandbox/conversion/boost/conversion/boost/tuple.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -29,7 +29,7 @@
   
   namespace conversion {
 
- template < class T1, class T2, class S1, class S2>
+ template < typename T1, typename T2, typename S1, typename S2>
     struct explicit_converter_cp< fusion::tuple<T1,T2>, fusion::tuple<S1,S2>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
     , requires(
@@ -52,7 +52,7 @@
         );
       }
     };
- template < class T1, class T2, class T3, class S1, class S2, class S3>
+ template < typename T1, typename T2, typename T3, typename S1, typename S2, typename S3>
     struct explicit_converter_cp< fusion::tuple<T1,T2,T3>, fusion::tuple<S1,S2,S3>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(

Modified: sandbox/conversion/boost/conversion/config.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/config.hpp (original)
+++ sandbox/conversion/boost/conversion/config.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -18,8 +18,6 @@
 #include <boost/config.hpp>
 #include <boost/utility/enable_if.hpp>
 
-//#define BOOST_CONVERSION_USES_SFINAE
-
 #if !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS)
   #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
   #else

Modified: sandbox/conversion/boost/conversion/convert_to_or_fallback.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/convert_to_or_fallback.hpp (original)
+++ sandbox/conversion/boost/conversion/convert_to_or_fallback.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -8,41 +8,35 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 
-/*!
- @file
- @brief
- Defines the free function @c convert_to_or_fallback and its customization point @c converter_or_fallbacker_cp.
-
- The @c convert_to_or_fallback function converts the @c from parameter to a @c Target type. If the conversion fails the fallback value is used to construct a Target @c instance.
-
+/**
+ * @file
+ * @brief
+ * Defines the free function @c convert_to_or_fallback and its customization
+ * point @c converter_or_fallbacker_cp.
+ *
+ * The @c convert_to_or_fallback function converts the @c from parameter to a
+ * @c Target type. If the conversion fails the fallback value is used to
+ * construct a Target @c instance.
+ *
+ * The default implementation applies the conversion @c Target operator of the
+ * @c Source class or the copy constructor of the @c Target class.
+ * When an exception is thrown the fallback is returned.
+ * Of course if both exist the conversion is ambiguous.
  */
 
 #ifndef BOOST_CONVERSION_CONVERT_TO_OR_FALLBACK_HPP
 #define BOOST_CONVERSION_CONVERT_TO_OR_FALLBACK_HPP
 
-/**
- The default implementation applies the conversion @c Target operator of the @c Source class or
- the copy constructor of the @c Target class. When an exception is thrown the fallback is returned.
- Of course if both exist the conversion is ambiguous.
- A user adapting another type could need to specialize the @c convert_to_or_fallback free function if the default behavior is not satisfactory.
- * A user adapting another type could need to overload the @c convert_to_or_fallback free function
- * if the default behavior is not satisfactory.
- * The user can add the @c convert_to_or_fallback overloading on any namespace found by ADL from the @c Source or the @c Target.
- * A trick is used to overload on the return type by adding a dummy parameter having the Target.
- *
- * But sometimes, as it is the case for the standard classes,
- * we can not add new functions on the @c std namespace, so we need a different technique.
- * In this case the user can partially specialize the @c boost::conversion::overload_workaround::convert_to_or_fallback struct.
- */
-
 #include <boost/conversion/config.hpp>
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/is_extrinsically_explicit_convertible.hpp>
 #include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 #include <boost/utility/enable_if.hpp>
 
 namespace boost {
   namespace conversion {
+
     //! Customization point for @c convert_to_or_fallback.
     //!
     //! @tparam Target target type of the conversion.
@@ -51,8 +45,8 @@
     //! @tparam Enable A dummy template parameter that can be used for SFINAE.
     //!
     //! This class must be specialized by the user.
- template < typename Target, typename Source, typename Fallback=Target, class Enable = void>
- struct converter_or_fallbacker_cp {};
+ template < typename Target, typename Source, typename Fallback=Target, typename Enable = void>
+ struct converter_or_fallbacker_cp : false_type {};
 
     //! Default @c converter_or_fallbacker.
     //!
@@ -62,7 +56,7 @@
     //! @tparam Enable A dummy template parameter that can be used for SFINAE.
     //!
     //! The default implementation relies on the @c converter_or_fallbacker_cp customization point which must be specialized by the user.
- template < typename Target, typename Source, typename Fallback=Target, class Enable = void>
+ template < typename Target, typename Source, typename Fallback=Target, typename Enable = void>
     struct converter_or_fallbacker : converter_or_fallbacker_cp<Target,Source,Fallback,Enable> {};
 
     //! Specialization for @c converter_or_fallbacker when
@@ -77,15 +71,16 @@
     template < typename Target, typename Source, typename Fallback>
     struct converter_or_fallbacker<Target, Source, Fallback,
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
- requires(ExtrinsicallyExplicitConvertible<Source,Target> && ExtrinsicallyExplicitConvertible<Fallback,Target>)
+ requires(ExtrinsicallyExplicitConvertible<Source,Target>
+ && ExtrinsicallyExplicitConvertible<Fallback,Target>)
 #else
         typename enable_if_c<
              is_extrinsically_explicit_convertible<Source,Target>::value
           && is_extrinsically_explicit_convertible<Fallback,Target>::value
>::type
 #endif
- > {
- //!
+ > : true_type
+ {
       //! @Returns The converted value if the conversion succeeds or the conversion of the fallback.
       //! @Throws Whatever the conversion from @c Fallback to @c Target can throws when the conversion fails.
       Target operator()(const Source& val, Fallback const& fallback)
@@ -112,20 +107,33 @@
       //! @NoThrow
       //! Forwards the call to the overload workaround, which can yet be specialized by the user for standard C++ types.
       template < typename Target, typename Source, typename Fallback >
- Target convert_to_or_fallback(const Source& from, Fallback const& fallback, dummy::type_tag<Target> const&) {
- return conversion::converter_or_fallbacker<Target,Source,Fallback>()(from, fallback);
+ typename enable_if_c<
+ converter_or_fallbacker<Target,Source,Fallback>::value
+ ,
+ Target
+ >::type
+ convert_to_or_fallback(const Source& from, Fallback const& fallback, dummy::type_tag<Target> const&) {
+ return converter_or_fallbacker<Target,Source,Fallback>()(from, fallback);
       }
     }
 
     namespace impl {
       template <typename Target, typename Source, typename Fallback>
- Target convert_to_or_fallback_impl(Source const& from, Fallback const& fallback) {
+ Target
+ convert_to_or_fallback_impl(Source const& from, Fallback const& fallback) {
         using namespace boost::conversion::impl_2;
         //use boost::conversion::impl_2::convert_to_or_fallback if ADL fails
         return convert_to_or_fallback(from, fallback, dummy::type_tag<Target>());
       }
     }
 #endif
+ }
+}
+
+#include <boost/conversion/detail/is_extrinsically_explicit_convertible_or_fallback_tagged.hpp>
+
+namespace boost {
+ namespace conversion {
 
     //! @brief Extrinsic conversion function with fallback.
     //! Converts the @c from parameter to a @c Target type. If the conversion fails the fallback value is used to construct a Target @c instance.
@@ -144,6 +152,7 @@
     template <typename Target, typename Source, typename Fallback>
     typename enable_if_c<
          ! is_same<Target,Fallback>::value
+ && is_extrinsically_explicit_convertible_or_fallback_tagged<Source,Target,Fallback>::value
     , Target>::type
     convert_to_or_fallback(Source const& from, Fallback const& fallback) {
       return conversion::impl::convert_to_or_fallback_impl<Target>(from, fallback);
@@ -161,7 +170,10 @@
     //! int t=boost::conversion::convert_to_or_fallback(s,-1);
     //! @endcode
     template <typename Target, typename Source>
- Target convert_to_or_fallback(Source const& from, Target const& fallback) {
+ typename enable_if_c<
+ is_extrinsically_explicit_convertible_or_fallback_tagged<Source,Target,Target>::value
+ , Target>::type
+ convert_to_or_fallback(Source const& from, Target const& fallback) {
       return conversion::impl::convert_to_or_fallback_impl<Target>(from, fallback);
     }
   }

Modified: sandbox/conversion/boost/conversion/convertible_from.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/convertible_from.hpp (original)
+++ sandbox/conversion/boost/conversion/convertible_from.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -24,6 +24,7 @@
 #include <boost/conversion/assign_to.hpp>
 #include <boost/conversion/is_extrinsically_convertible.hpp>
 #include <boost/utility/enable_if.hpp>
+#include <boost/conversion/type_traits/is_copy_constructible.hpp>
 
 namespace boost {
   namespace conversion {
@@ -35,7 +36,17 @@
     //!
     //! Requires @c Source must be CopyConstructible
 
- template <typename Source>
+ template <typename Source, typename Enable =
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+ requires(
+ CopyConstructible<Source>
+ )
+#else
+ typename enable_if_c<
+ is_copy_constructible<Source>::value
+ >::type
+#endif
+ >
     class convertible_from {
       Source val_;
     public:
@@ -59,9 +70,10 @@
       }
 
     };
- //! @brief makes a wrapper implicitly convertible to types extrinsicly implicit convertibles from @c Source.
 
- //! The result provides implicitly conversion to any type which is extrinsic implicit convertible from @c Source.
+ //! @brief makes a wrapper implicitly convertible to types extrinsicly implicit convertibles from @c Source.
+ //!
+ //! The result provides implicitly conversion to any type which is extrinsically implicit convertible from @c Source.
     //! @Returns convertible_from<Source>(s).
     //! @NoThrow.
     //! @Example
@@ -77,7 +89,11 @@
     //! @endcode
 
     template <typename Source>
- convertible_from<Source> implicitly(Source s)
+ typename enable_if_c<
+ is_copy_constructible<Source>::value
+ , convertible_from<Source>
+ >::type
+ implicitly(Source s)
     {
       return convertible_from<Source>(s);
     }

Added: sandbox/conversion/boost/conversion/detail/any.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/any.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,30 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the any type useful to catch any type on overloadin resolution.
+ */
+
+#ifndef BOOST_CONVERSION_DETAIL_ANY_HPP
+#define BOOST_CONVERSION_DETAIL_ANY_HPP
+
+namespace boost {
+ namespace conversion {
+ namespace detail {
+ struct any {
+ template <typename T>
+ any(T);
+ };
+ } // detail
+} // conversion
+} // boost
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/dummy_size.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/dummy_size.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,31 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the dummy_size useful to to accept a sizeof as parameter.
+ */
+
+#ifndef BOOST_CONVERSION_DETAIL_DUMMY_SIZE_HPP
+#define BOOST_CONVERSION_DETAIL_DUMMY_SIZE_HPP
+
+namespace boost {
+ namespace conversion {
+ namespace detail {
+
+ //! type useful to accept a sizeof as parameter
+ template <std::size_t N>
+ struct dummy_size;
+
+ } // detail
+ } // conversion
+} // boost
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/is_extrinsically_assignable_tagged.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/is_extrinsically_assignable_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,209 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the type trait @c is_extrinsically_assignable_tagged.
+ */
+
+#ifndef BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_HPP
+#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_HPP
+
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+namespace boost {
+ namespace conversion {
+ /**
+ * States if @c Source is extrinsically assignable to @c Target.
+ *
+ * Condition: @c true_type if and only if the return expression in the following code
+ * would be well-formed:
+ * @code
+ * Target test() { return implicit_convert_to<Target>(declval<Source>()); }
+ * @endcode
+ *
+ * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ */
+ template <typename Target, typename Source>
+ struct is_extrinsically_assignable_tagged {};
+
+ //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_assignable type trait for classes.
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
+
+ }
+}
+#else
+
+
+#include <boost/conversion/config.hpp>
+#include <boost/conversion/detail/any.hpp>
+#include <boost/conversion/detail/yes_no_types.hpp>
+#include <boost/conversion/detail/dummy_size.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/conversion/assign_to.hpp>
+
+
+#if ! defined BOOST_NO_DECLTYPE
+ #if defined _MSC_VER
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
+ #endif
+ #elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_DECLTYPE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #if ! defined BOOST_NO_SFINAE_EXPR
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
+ #endif
+ #else
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_DECLTYPE
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
+ #endif
+ #else
+#error
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_DECLTYPE
+ //#define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
+ #endif
+#elif ! defined BOOST_NO_SFINAE_EXPR
+ #if defined _MSC_VER
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+#elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #elif defined __GNUC__
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
+ #else
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #endif
+#else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
+#endif
+
+#if ! defined BOOST_NO_RVALUE_REFERENCES
+ #if defined _MSC_VER
+ #elif defined __clang__
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_RVALUE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_RVALUE
+ #endif
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_RVALUE
+ #endif
+#endif
+
+namespace boost {
+ namespace conversion {
+ namespace detail {
+ namespace is_extrinsically_assignable_tagged {
+ using namespace boost::conversion_impl_2;
+
+ template <typename T, typename S,
+ bool True =
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_assignable<S,T>::value)
+ ,
+ bool False =
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value >
+ struct imp;
+
+#if defined BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_DECLTYPE
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ {
+ template <typename T1, typename S1>
+ static decltype((
+ assign_to(declval<T1>(), declval<S1>()) // EXPR
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_RVALUE
+ selector(T1&&, S1&&);
+ #else
+ selector(T1&, S1&);
+ #endif
+
+ template <typename T1, typename S1>
+ static false_type
+ selector(any,any);
+
+ typedef typename common_type<decltype(selector(declval<T>(), declval<S>()))>::type type;
+ };
+
+#elif defined BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
+
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ {
+ template<typename T1, typename S1>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ assign_to(declval<T1>(), declval<S1>()) // EXPR
+ )
+ >*);
+
+ template<typename T1, typename S1>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<S,T>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
+
+#else
+ template <typename T,typename S>
+ struct imp<T,S,false,false>
+ : public conversion::assigner<T,S> {};
+#endif
+
+ template <typename T,typename S,bool B>
+ struct imp<T, S, true, B>
+ : public true_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<T, S, B, true>
+ : public false_type {};
+
+ } // is_extrinsically_assignable_tagged
+ } // detail
+
+
+ template <typename Target, typename Source>
+ struct is_extrinsically_assignable_tagged
+ : public detail::is_extrinsically_assignable_tagged::imp<Target, Source> {};
+
+ } // conversion
+} // boost
+
+#endif // doc
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/is_extrinsically_convertible_tagged.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/is_extrinsically_convertible_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,225 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the type trait @c is_extrinsically_convertible_tagged.
+ */
+
+#ifndef BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_HPP
+#define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_HPP
+
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+namespace boost {
+ namespace conversion {
+ /**
+ * States if @c Source is extrinsically explicit convertible to @c Target.
+ *
+ * Condition: @c true_type if and only if the return expression in the following code
+ * would be well-formed:
+ * @code
+ * Target test() { return implicit_convert_to<Target>(declval<Source>()); }
+ * @endcode
+ *
+ * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ */
+ template <typename Source, typename Target>
+ struct is_extrinsically_convertible_tagged {};
+
+ //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_convertible type trait for classes.
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
+
+ }
+}
+#else
+
+
+#include <boost/conversion/config.hpp>
+#include <boost/conversion/detail/any.hpp>
+#include <boost/conversion/detail/yes_no_types.hpp>
+#include <boost/conversion/detail/dummy_size.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/conversion/implicit_convert_to.hpp>
+
+
+#if ! defined BOOST_NO_DECLTYPE
+ #if defined _MSC_VER
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
+ #endif
+ #elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 7 )
+ #if ! defined BOOST_NO_SFINAE_EXPR
+ #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
+ #endif
+ #else
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
+ #endif
+ #else
+#error
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ //#define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
+ #endif
+#elif ! defined BOOST_NO_SFINAE_EXPR
+ #if defined _MSC_VER
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
+#elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #elif defined __GNUC__
+ #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #else
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #endif
+#else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
+#endif
+
+#if ! defined BOOST_NO_RVALUE_REFERENCES
+ #if defined _MSC_VER
+ #elif defined __clang__
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
+ #endif
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
+ #endif
+#endif
+
+namespace boost {
+ namespace conversion {
+ namespace detail {
+ namespace is_extrinsically_convertible_tagged {
+ using namespace boost::conversion::impl_2;
+
+ template <typename S, typename T,
+ bool True =
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
+ ,
+ bool False =
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value >
+ struct imp;
+
+#if defined BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ {
+ template <typename S1, typename T1>
+ static decltype((
+ implicit_convert_to(declval<S1>(), conversion::dummy::type_tag<T1>()) // EXPR
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
+ selector(S1&&, T1&&);
+ #else
+ selector(S1&, T1&);
+ #endif
+
+ template <typename S1, typename T1>
+ static false_type
+ selector(any,any);
+
+ typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
+ };
+
+#elif defined BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
+
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ {
+ template<typename X, typename Y>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ implicit_convert_to(declval<X>(), conversion::dummy::type_tag<Y>()) // EXPR
+ )
+ >*);
+
+ template<typename X, typename Y>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<S,T>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
+
+#else
+ template <typename S,typename T>
+ struct imp<S,T,false,false>
+ : public conversion::implicit_converter<T,S> {};
+#endif
+ template <typename S, typename T, std::size_t N>
+ struct imp<S[N],T[N],false,false>
+ : public false_type {};
+ template <typename S, typename T, std::size_t N>
+ struct imp<S[N],T,false,false>
+ : public false_type {};
+ template <typename S, typename T, std::size_t N>
+ struct imp<S,T[N],false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S[],T[],false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S[],T,false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S,T[],false,false>
+ : public false_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<S, T, true,B>
+ : public true_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<S, T, B,true>
+ : public false_type {};
+
+ } // is_extrinsically_convertible_tagged
+ } // detail
+
+
+ template <typename Source, typename Target>
+ struct is_extrinsically_convertible_tagged
+ : public detail::is_extrinsically_convertible_tagged::imp<Source, Target> {};
+
+} // conversion
+} // boost
+
+#endif // doc
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/is_extrinsically_explicit_convertible_or_fallback_tagged.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/is_extrinsically_explicit_convertible_or_fallback_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,222 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the type trait @c is_extrinsically_explicit_convertible_or_fallback.
+ */
+
+#ifndef BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_HPP
+#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_HPP
+
+
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+namespace boost {
+ namespace conversion {
+ /**
+ * States if @c Source is extrinsically explicit convertible to @c Target.
+ *
+ * Condition: @c true_type if and only if the return expression in the following code
+ * would be well-formed:
+ * @code
+ * Target test() { return explicit_convert_to<Target>(declval<Source>()); }
+ * @endcode
+ *
+ * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ */
+ template <typename Source, typename Target>
+ struct is_extrinsically_explicit_convertible_or_fallback_tagged {};
+
+ //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_explicit_convertible_or_fallback type trait for classes.
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED
+
+ }
+}
+#else
+
+
+#include <boost/conversion/config.hpp>
+#include <boost/conversion/detail/any.hpp>
+#include <boost/conversion/detail/yes_no_types.hpp>
+#include <boost/conversion/detail/dummy_size.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/conversion/type_traits/is_convertible.hpp>
+
+#if ! defined BOOST_NO_DECLTYPE
+ #if defined _MSC_VER
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED
+ #endif
+ #elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_DECLTYPE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 7 )
+ #if ! defined BOOST_NO_SFINAE_EXPR
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED
+ #endif
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_DECLTYPE
+ #endif
+ #else
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_DECLTYPE
+ #endif
+#elif ! defined BOOST_NO_SFINAE_EXPR
+ #if defined __clang__
+#error
+#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_SIZEOF
+ #elif defined __GNUC__
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_SIZEOF
+ #else
+ #error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_SIZEOF
+ #endif
+#else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED
+#endif
+
+#if ! defined BOOST_NO_RVALUE_REFERENCES
+ #if defined _MSC_VER
+ #elif defined __clang__
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_RVALUE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_RVALUE
+ #endif
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_RVALUE
+ #endif
+#endif
+
+namespace boost {
+ namespace conversion {
+ namespace impl_2 {}
+ namespace detail {
+ namespace is_extrinsically_explicit_convertible_or_fallback_tagged {
+ using namespace boost::conversion::impl_2;
+
+ template <typename S, typename T, typename F,
+ bool True =
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
+ ,
+ bool False =
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value
+ >
+ struct imp;
+
+#if defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_DECLTYPE
+ template <typename S, typename T, typename F>
+ struct imp<S,T,F,false,false>
+ {
+ template<typename S1, typename T1, typename F1>
+ static decltype((
+ convert_to_or_fallback(declval<S1>(),declval<F1>(), conversion::dummy::type_tag<T1>()) // EXPR
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_RVALUE
+ selector(S1&&, T1&&, F1&&);
+ #else
+ selector(S1&, T1&, F1&);
+ #endif
+
+ template<typename S1, typename T1, typename F1>
+ static false_type
+ selector(any,any,any);
+
+ typedef typename common_type<decltype(selector(declval<S>(), declval<T>(), declval<F>()))>::type type;
+ };
+
+#elif defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_OR_FALLBACK_TAGGED_USES_SIZEOF
+
+ template <typename S, typename T, typename F>
+ struct imp<S,T,F,false,false>
+ {
+ template<typename S1, typename T1, typename F1>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ convert_to_or_fallback(declval<S1>(),declval<F1>(), conversion::dummy::type_tag<T1>()) // EXPR
+ )
+ >*);
+
+ template<typename S1, typename T1, typename F1>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<S,T,F>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
+
+#else
+ template <typename S, typename T, typename F>
+ struct imp<S,T,F,false,false>
+ : public conversion::converter_or_fallbacker<T,S,F> {};
+#endif
+ template <typename S, typename T, typename F, std::size_t N>
+ struct imp<S[N],T[N],F,false,false>
+ : public false_type {};
+ template <typename S, typename T, typename F, std::size_t N>
+ struct imp<S[N],T,F,false,false>
+ : public false_type {};
+ template <typename S, typename T, typename F, std::size_t N>
+ struct imp<S,T[N],F,false,false>
+ : public false_type {};
+ template <typename S, typename T, typename F>
+ struct imp<S[],T[],F,false,false>
+ : public false_type {};
+ template <typename S, typename T, typename F>
+ struct imp<S[],T,F,false,false>
+ : public false_type {};
+ template <typename S, typename T, typename F>
+ struct imp<S,T[],F,false,false>
+ : public false_type {};
+
+ template <typename S,typename T, typename F,bool B>
+ struct imp<S, T, F, true, B>
+ : public true_type {};
+
+ template <typename S,typename T, typename F,bool B>
+ struct imp<S, T, F, B, true>
+ : public false_type {};
+
+ } // is_extrinsically_explicit_convertible_or_fallback_tagged
+ } // detail
+
+
+ template <typename Source, typename Target, typename Fallback>
+ struct is_extrinsically_explicit_convertible_or_fallback_tagged
+ : public detail::is_extrinsically_explicit_convertible_or_fallback_tagged::imp<Source, Target, Fallback> {};
+
+} // conversion
+} // boost
+
+#endif // doc
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/is_extrinsically_explicit_convertible_tagged.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/is_extrinsically_explicit_convertible_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,224 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the type trait @c is_extrinsically_explicit_convertible.
+ */
+
+#ifndef BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_HPP
+#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_HPP
+
+
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+namespace boost {
+ namespace conversion {
+ /**
+ * States if @c Source is extrinsically explicit convertible to @c Target.
+ *
+ * Condition: @c true_type if and only if the return expression in the following code
+ * would be well-formed:
+ * @code
+ * Target test() { return explicit_convert_to<Target>(declval<Source>()); }
+ * @endcode
+ *
+ * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ */
+ template <typename Source, typename Target>
+ struct is_extrinsically_explicit_convertible_tagged {};
+
+ //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_explicit_convertible type trait for classes.
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
+
+ }
+}
+#else
+
+
+#include <boost/conversion/config.hpp>
+#include <boost/conversion/detail/any.hpp>
+#include <boost/conversion/detail/yes_no_types.hpp>
+#include <boost/conversion/detail/dummy_size.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/conversion/type_traits/is_convertible.hpp>
+
+#if ! defined BOOST_NO_DECLTYPE
+ #if defined _MSC_VER
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
+ #endif
+ #elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 7 )
+ #if ! defined BOOST_NO_SFINAE_EXPR
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
+ #endif
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ #endif
+ #else
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ #endif
+#elif ! defined BOOST_NO_SFINAE_EXPR
+ #if defined __clang__
+ #error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #elif defined __GNUC__
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #else
+ #error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #endif
+#else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
+#endif
+
+#if ! defined BOOST_NO_RVALUE_REFERENCES
+ #if defined _MSC_VER
+ #elif defined __clang__
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
+ #endif
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
+ #endif
+#endif
+
+namespace boost {
+ namespace conversion {
+ namespace impl_2 {}
+ namespace detail {
+ namespace is_extrinsically_explicit_convertible_tagged {
+ using namespace boost::conversion::impl_2;
+
+ template <typename S, typename T,
+ bool True =
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
+ ,
+ bool False =
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value
+ >
+ struct imp;
+
+#if defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ {
+ template <typename S1, typename T1>
+ static decltype((
+ explicit_convert_to(declval<S1>(), conversion::dummy::type_tag<T1>()) // EXPR
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
+ selector(S1&&, T1&&);
+ #else
+ selector(S1&, T1&);
+ #endif
+
+ template <typename S1, typename T1>
+ static false_type
+ selector(any,any);
+
+ typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
+ };
+
+#elif defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
+
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ {
+ template<typename S1, typename T1>
+ static yes_type
+ selector(
+ dummy_size<
+ sizeof(
+ explicit_convert_to(declval<S1>(), conversion::dummy::type_tag<T1>()) // EXPR
+ )
+ >*
+ );
+
+ template<typename S1, typename T1>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<S,T>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
+
+#else
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ : public conversion::explicit_converter<T,S> {};
+#endif
+ template <typename S, typename T, std::size_t N>
+ struct imp<S[N],T[N],false,false>
+ : public false_type {};
+ template <typename S, typename T, std::size_t N>
+ struct imp<S[N],T,false,false>
+ : public false_type {};
+ template <typename S, typename T, std::size_t N>
+ struct imp<S,T[N],false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S[],T[],false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S[],T,false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S,T[],false,false>
+ : public false_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<S, T, true,B>
+ : public true_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<S, T, B,true>
+ : public false_type {};
+
+ } // is_extrinsically_explicit_convertible_tagged
+ } // detail
+
+
+ template <typename Source, typename Target>
+ struct is_extrinsically_explicit_convertible_tagged
+ : public detail::is_extrinsically_explicit_convertible_tagged::imp<Source, Target> {};
+
+} // conversion
+} // boost
+
+#endif // doc
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/is_extrinsically_try_assignable_tagged.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/is_extrinsically_try_assignable_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,211 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the type trait @c is_extrinsically_try_assignable_tagged.
+ */
+
+#ifndef BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_HPP
+#define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_HPP
+
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+namespace boost {
+ namespace conversion {
+ /**
+ * States if @c Source is extrinsically assignable to @c Target.
+ *
+ * Condition: @c true_type if and only if the return expression in the following code
+ * would be well-formed:
+ * @code
+ * Target test() { return implicit_convert_to<Target>(declval<Source>()); }
+ * @endcode
+ *
+ * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ */
+ template <typename Source, typename Target>
+ struct is_extrinsically_try_assignable_tagged {};
+
+ //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_try_assignable type trait for classes.
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED
+
+ }
+}
+#else
+
+
+#include <boost/conversion/config.hpp>
+#include <boost/conversion/detail/any.hpp>
+#include <boost/conversion/detail/yes_no_types.hpp>
+#include <boost/conversion/detail/dummy_size.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/try_assign_to.hpp>
+
+
+#if ! defined BOOST_NO_DECLTYPE
+ #if defined _MSC_VER
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED
+ #endif
+ #elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_DECLTYPE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED
+ #endif
+ #else
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_SIZEOF
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_DECLTYPE
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED
+ #endif
+ #else
+#error
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_DECLTYPE
+ //#define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED
+ #endif
+#elif ! defined BOOST_NO_SFINAE_EXPR
+ #if defined _MSC_VER
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_SIZEOF
+#elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #elif defined __GNUC__
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED
+ #else
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_SIZEOF
+ #endif
+#else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED
+#endif
+
+#if ! defined BOOST_NO_RVALUE_REFERENCES
+ #if defined _MSC_VER
+ #elif defined __clang__
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_RVALUE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_RVALUE
+ #endif
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_RVALUE
+ #endif
+#endif
+
+namespace boost {
+ namespace conversion {
+ namespace detail {
+ namespace is_extrinsically_try_assignable_tagged {
+ using namespace boost::conversion_impl_2;
+
+
+ template <typename T, typename S,
+ bool True =
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_assignable<S,T>::value)
+ ,
+ bool False =
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value >
+ struct imp;
+
+#if defined BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_DECLTYPE
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ {
+ template <typename T1, typename S1>
+ static decltype((
+ try_assign_to(declval<T1>(), declval<S1>()) // EXPR
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_RVALUE
+ selector(T1&&, S1&&);
+ #else
+ selector(T1&, S1&);
+ #endif
+
+ template <typename S1, typename T1>
+ static false_type
+ selector(any,any);
+
+ typedef typename common_type<decltype(selector(declval<T>(), declval<S>()))>::type type;
+ };
+
+#elif defined BOOST_CONVERSION_IS_EXTRINSIC_TRY_ASSIGNABLE_TAGGED_USES_SIZEOF
+
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ {
+ template<typename T1, typename S1>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ try_assign_to(declval<T1>(), declval<S1>()) // EXPR
+ )
+ >*);
+
+ template<typename T1, typename S1>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<S,T>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
+
+#else
+ template <typename T,typename S>
+ struct imp<T,S,false,false>
+ : public conversion::try_assigner<T,S> {};
+#endif
+
+ template <typename T,typename S,bool B>
+ struct imp<T, S, true, B>
+ : public true_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<T, S, B, true>
+ : public false_type {};
+
+ } // is_extrinsically_try_assignable_tagged
+ } // detail
+
+
+ template <typename Target, typename Source>
+ struct is_extrinsically_try_assignable_tagged
+ : public detail::is_extrinsically_try_assignable_tagged::imp<Target, Source> {};
+
+} // conversion
+} // boost
+
+#endif // doc
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/is_extrinsically_try_convertible_tagged.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/is_extrinsically_try_convertible_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,225 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the type trait @c is_extrinsically_try_convertible.
+ */
+
+#ifndef BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_HPP
+#define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_HPP
+
+
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+namespace boost {
+ namespace conversion {
+ /**
+ * States if @c Source is extrinsically try convertible to @c Target.
+ *
+ * Condition: @c true_type if and only if the return expression in the following code
+ * would be well-formed:
+ * @code
+ * Target test() { return try_convert_to<Target>(declval<Source>()); }
+ * @endcode
+ *
+ * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ */
+ template <typename Source, typename Target>
+ struct is_extrinsically_try_convertible_tagged {};
+
+ //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_try_convertible type trait for classes.
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED
+
+ }
+}
+#else
+
+
+#include <boost/conversion/config.hpp>
+#include <boost/conversion/detail/any.hpp>
+#include <boost/conversion/detail/yes_no_types.hpp>
+#include <boost/conversion/detail/dummy_size.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/conversion/try_convert_to.hpp>
+#include <boost/conversion/type_traits/is_convertible.hpp>
+
+#if ! defined BOOST_NO_DECLTYPE
+ #if defined _MSC_VER
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED
+ #endif
+ #elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 7 )
+ #if ! defined BOOST_NO_SFINAE_EXPR
+//#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED
+ #endif
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ #endif
+ #else
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ #endif
+#elif ! defined BOOST_NO_SFINAE_EXPR
+ #if defined __clang__
+#error
+#define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #elif defined __GNUC__
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_SIZEOF
+ //#define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED
+ #else
+ #error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_SIZEOF
+ #endif
+#else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED
+#endif
+
+#if ! defined BOOST_NO_RVALUE_REFERENCES
+ #if defined _MSC_VER
+ #elif defined __clang__
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_RVALUE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_RVALUE
+ #endif
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_RVALUE
+ #endif
+#endif
+
+namespace boost {
+ namespace conversion {
+ namespace impl_2 {}
+ namespace detail {
+ namespace is_extrinsically_try_convertible_tagged {
+ using namespace boost::conversion::impl_2;
+
+ template <typename S, typename T,
+ bool True =
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
+ ,
+ bool False =
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value
+ >
+ struct imp;
+
+#if defined BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_DECLTYPE
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ {
+ template <typename S1, typename T1>
+ static decltype((
+ try_convert_to(declval<S1>(), conversion::dummy::type_tag<T1>()) // EXPR
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_RVALUE
+ selector(S1&&, T1&&);
+ #else
+ selector(S1&, T1&);
+ #endif
+
+ template <typename S1, typename T1>
+ static false_type
+ selector(any,any);
+
+ typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
+ };
+
+#elif defined BOOST_CONVERSION_IS_EXTRINSIC_TRY_CONVERTIBLE_TAGGED_USES_SIZEOF
+
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ {
+ template<typename X, typename Y>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ try_convert_to(declval<X>(), conversion::dummy::type_tag<Y>()) // EXPR
+ )
+ >*);
+
+ template<typename X, typename Y>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<S,T>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
+
+#else
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ : public conversion::try_converter<T,S> {};
+#endif
+ template <typename S, typename T, std::size_t N>
+ struct imp<S[N],T[N],false,false>
+ : public false_type {};
+ template <typename S, typename T, std::size_t N>
+ struct imp<S[N],T,false,false>
+ : public false_type {};
+ template <typename S, typename T, std::size_t N>
+ struct imp<S,T[N],false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S[],T[],false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S[],T,false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S,T[],false,false>
+ : public false_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<S, T, true,B>
+ : public true_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<S, T, B,true>
+ : public false_type {};
+
+ } // is_extrinsically_try_convertible_tagged
+ } // detail
+
+
+ template <typename Source, typename Target>
+ struct is_extrinsically_try_convertible_tagged
+ : public detail::is_extrinsically_try_convertible_tagged::imp<Source, Target> {};
+
+} // conversion
+} // boost
+
+#endif // doc
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/nat.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/nat.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,29 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the nat type used as default of variadic templates to mean not a type.
+ */
+
+#ifndef BOOST_CONVERSION_DETAIL_NAT_HPP
+#define BOOST_CONVERSION_DETAIL_NAT_HPP
+
+namespace boost {
+ namespace conversion {
+ namespace detail {
+ //! not a type. used as default of variadic templates
+ struct nat {};
+
+ } // detail
+} // conversion
+} // boost
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/detail/yes_no_types.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/detail/yes_no_types.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,32 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the any type useful to catch any type on overload resolution.
+ */
+
+#ifndef BOOST_CONVERSION_DETAIL_YES_NO_TYPES_HPP
+#define BOOST_CONVERSION_DETAIL_YES_NO_TYPES_HPP
+
+namespace boost {
+ namespace conversion {
+ namespace detail {
+
+ //! type useful to compare with the sizeof
+ typedef char yes_type;
+ //! type useful to compare with the sizeof
+ struct no_type { char a[2]; };
+
+ } // detail
+ } // conversion
+} // boost
+
+#endif // header
+

Modified: sandbox/conversion/boost/conversion/explicit_convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/explicit_convert_to.hpp (original)
+++ sandbox/conversion/boost/conversion/explicit_convert_to.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -9,25 +9,31 @@
 //////////////////////////////////////////////////////////////////////////////
 /**
  * @file
- * @brief Defines the free function @c explicit_convert_to and its customization point @c explicit_converter.
+ * @brief Defines the free function @c explicit_convert_to and its customization
+ * point @c explicit_converter.
  *
- * The @c explicit_convert_to function explicit converts the @c from parameter to a @c Target type.
+ * The @c explicit_convert_to function explicit converts the @c from parameter
+ * to a @c Target type.
  *
- */
-#ifndef BOOST_CONVERSION_EXPLICIT_CONVERT_TO_HPP
-#define BOOST_CONVERSION_EXPLICIT_CONVERT_TO_HPP
-/**
- * A user adapting another type could need to overload the @c explicit_convert_to free function
- * if the default behavior is not satisfactory.
- * The user can add the @c explicit_convert_to overloading on any namespace found by ADL from the @c Source or the @c Target.
- * A trick is used to overload on the return type by adding a dummy parameter having the Target.
+ * The default behavior returns the explicit conversion operator when @c Source is
+ * implicitly convertible to @c Target and the extrinsic implicit conversion when
+ * @c Source is extrinsically implicitly convertible to @c Target.
+ *
+ * When the default behavior is not satisfactory or it doesn't takes care of
+ * specific types, the user could customize the behavior of
+ * @c explicit_convert_to in two ways:
  *
- * But sometimes, as it is the case for the standard classes,
- * we can not add new functions on the @c std namespace, so we need a different technique.
- * In this case the user can partially specialize the @c boost::conversion::overload_workaround::explicit_convert_to struct.
+ * * overload the @c explicit_convert_to on any namespace found by ADL from the
+ * @c Source or the @c Target. A trick is used to overload on the return type
+ * by adding a dummy parameter depending on the @c Target.
+ * * partially specialize the @c boost::conversion::explicit_converter_cp struct.
  *
+ * @note As we can not add new functions on the @c std namespace, partial
+ * specialization is the only option.
  */
 
+#ifndef BOOST_CONVERSION_EXPLICIT_CONVERT_TO_HPP
+#define BOOST_CONVERSION_EXPLICIT_CONVERT_TO_HPP
 
 #include <boost/conversion/implicit_convert_to.hpp>
 #include <boost/utility/enable_if.hpp>
@@ -37,6 +43,7 @@
 #include <boost/conversion/is_extrinsically_convertible.hpp>
 #include <boost/conversion/detail/is_optional.hpp>
 #include <boost/optional.hpp>
+#include <boost/type_traits/add_reference.hpp>
 
 namespace boost {
   namespace conversion {
@@ -48,7 +55,7 @@
     //! @tparam Enable A dummy template parameter that can be used for SFINAE.
     //!
     //! This class must be specialized by the user when the default behavior of @c explicit_converter is not satisfying.
- template < typename Target, typename Source, class Enable = void >
+ template < typename Target, typename Source, typename Enable = void >
     struct explicit_converter_cp : false_type {};
 
     //! Default @c explicit_converter.
@@ -58,7 +65,7 @@
     //! @tparam Enable A dummy template parameter that can be used for SFINAE.
     //!
     //! The default implementation relies on the @c explicit_converter_cp which must be specialized by the user.
- template < typename Target, typename Source, class Enable = void >
+ template < typename Target, typename Source, typename Enable = void >
     struct explicit_converter : explicit_converter_cp<Target,Source,Enable> {};
 
     //! Specialization for @c explicit_converter when @c is_explicitly_convertible<Source,Target>.
@@ -74,20 +81,21 @@
 #else
         typename enable_if_c<
           is_explicitly_convertible<Source,Target>::value
- && !(detail::is_optional<Target>::value && !detail::is_optional<Source>::value)
+ && !( detail::is_optional<Target>::value &&
+ ! detail::is_optional<Source>::value)
>::type
 #endif
> : true_type
     {
       //! @Effects Converts the @c from parameter to an instance of the @c Target type, using the conversion operator or copy constructor.
       //! @Throws Whatever the underlying conversion @c Target operator of the @c Source class throws.
- //Target operator()(const typename add_reference<Source>::type val)
       Target operator()(const Source& val)
+ //Target operator()(const Source& val)
       {
         return Target((val));
       }
     };
- //! Specialization for @c explicit_converter when @c is_explicitly_convertible<Source,Target>.
+ //! Specialization for @c explicit_converter when @c is_extrinsically_convertible<Source,Target>.
     //!
     //! @tparam Target target type of the conversion.
     //! @tparam Source source type of the conversion.
@@ -101,13 +109,14 @@
         typename enable_if_c<
                 is_extrinsically_convertible<Source,Target>::value
             && !is_explicitly_convertible<Source,Target>::value
- && !(detail::is_optional<Target>::value && !detail::is_optional<Source>::value)
+ && !( detail::is_optional<Target>::value &&
+ ! detail::is_optional<Source>::value)
>::type
 #endif
> : true_type
     {
       //! @Effects Converts the @c from parameter to an instance of the @c Target type, using the conversion operator or copy constructor.
- //! @Throws Whatever the underlying conversion @c Target operator of the @c Source class throws.
+ //! @Throws Whatever the expression @c implicit_convert_to<Target>(val) throws.
       Target operator()(const Source& val)
       {
         return implicit_convert_to<Target>(val);
@@ -120,14 +129,16 @@
 
       //! @brief Default @c explicit_convert_to overload, used when ADL fails.
       //!
- //! @Effects Converts the @c from parameter to an instance of the @c Target type, using by default the conversion operator or copy constructor.
- //! @Throws Whatever the underlying conversion @c Target operator of the @c Source class or the copy constructor of the @c Target class throws.
- //! Forwards the call to the overload workaround, which can yet be specialized by the user for standard C++ types.
+ //! @Effects Converts the @c from parameter to an instance of the @c Target type,
+ //! using by explicit_converter customization point.
+ //! @Throws Whatever the expression @c conversion::explicit_converter<Target,Source>()(from) throws.
+
       template < typename Target, typename Source >
       typename enable_if_c<
         conversion::explicit_converter<Target,Source>::value
       , Target>::type
- explicit_convert_to(const Source& from, dummy::type_tag<Target> const&)
+ explicit_convert_to(const Source& from,
+ dummy::type_tag<Target> const&)
       {
         return conversion::explicit_converter<Target,Source>()(from);
       }
@@ -138,22 +149,23 @@
   }
 }
 
-#include <boost/conversion/is_extrinsically_explicit_convertible_tagged.hpp>
+#include <boost/conversion/detail/is_extrinsically_explicit_convertible_tagged.hpp>
 
 namespace boost {
   namespace conversion {
 
     //! @brief Extrinsic conversion function.
     //! Converts the @c from parameter to an instance of the @c Target type.
- //! This function can be seen as an emulation of free function overload of the conversion operator.
+ //! This function can be seen as an emulation of free function overload of
+ //! the conversion operator.
     //! @tparam Target target type of the conversion.
     //! @tparam Source source type of the conversion.
     //!
     //! @Params
     //! @Param{source,source of the conversion}
     //!
- //! @Returns The result of @c explicit_converter customization point.
- //! @Throws Whatever the @c explicit_converter call operator throws.
+ //! @Returns @c explicit_convert_to(from, dummy::type_tag<Target>()).
+ //! @Throws Whatever the @c explicit_convert_to(from, dummy::type_tag<Target>()) throws.
     //!
     //! @Example
     //! @code
@@ -172,14 +184,15 @@
       return explicit_convert_to(from, dummy::type_tag<Target>());
     }
 
- //! @brief @c explicit converter specialization to try to convert the source to @c Target::value_type when @c Target is optional.
+ //! @brief @c explicit converter specialization to try to convert the source
+ //! to @c Target when the target type is @c optional<Target>.
     //!
     //! @tparam Target target type of the conversion.
     //! @tparam Source source type of the conversion.
     //!
     //! @Requires @c is_extrinsically_explicit_convertible<Source,Target>
- //! We can see this specialization as a try_convert_to function.
- template < class Target, class Source>
+ //! @Remarks We can see this specialization as a try_convert_to function.
+ template < typename Target, typename Source>
     struct explicit_converter< optional<Target>, Source,
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         requires(ExtrinsicallyExplicitConvertible<Source,Target>)
@@ -193,8 +206,8 @@
 
     {
       //! @Returns If the source is convertible to the target @c value_type
- //! @c Target initialized to the result of the conversion.
- //! Uninitialized @c Target otherwise.
+ //! @c optional<Target> is initialized to the result of the conversion.
+ //! Uninitialized @c optional<Target> otherwise.
       optional<Target> operator()(Source const & from)
       {
         try

Modified: sandbox/conversion/boost/conversion/implicit_convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/implicit_convert_to.hpp (original)
+++ sandbox/conversion/boost/conversion/implicit_convert_to.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -16,7 +16,7 @@
  * The @c implicit_convert_to function converts the @c from parameter to a
  * @c Target type and is intended to be used in a implicit context.
  *
- * The default behavior call the implicit conversion when @c Source is
+ * The default behavior returns the implicit conversion when @c Source is
  * implicitly convertible to @c Target
  *
  * When the default behavior is not satisfactory or it doesn't takes care of
@@ -64,7 +64,7 @@
     //!
     //! This class can be specialized by the user when the default behavior of
     //! @c implicit_converter doesn't takes care of he specific types.
- template < typename Target, typename Source, class Enable = void >
+ template < typename Target, typename Source, typename Enable = void >
     struct implicit_converter_cp : false_type {};
 
     //! Default customization point for @c implicit_convert_to.
@@ -75,7 +75,7 @@
     //!
     //! The default implementation relies on the @c implicit_converter_cp which
     //! must be specialized by the user.
- template < typename Target, typename Source, class Enable = void >
+ template < typename Target, typename Source, typename Enable = void >
     struct implicit_converter : implicit_converter_cp<Target,Source,Enable> {};
 
 
@@ -100,7 +100,7 @@
        * @c Target type, using the conversion operator or copy constructor.
        * @Throws Whatever the underlying conversion @c Target operator of the @c Source class throws.
        */
- Target operator()(typename add_reference<const Source>::type val)
+ Target operator()(const Source& val)
       {
         return val;
       }
@@ -118,7 +118,8 @@
       typename enable_if_c<
         conversion::implicit_converter<Target,Source>::value
       , Target>::type
- implicit_convert_to(const Source& from, dummy::type_tag<Target> const&)
+ implicit_convert_to(const Source& from,
+ dummy::type_tag<Target> const&)
       {
         return conversion::implicit_converter<Target,Source>()(from);
       }
@@ -129,7 +130,7 @@
   } // namespace conversion
 } // namespace boost
 
-#include <boost/conversion/is_extrinsically_convertible_tagged.hpp>
+#include <boost/conversion/detail/is_extrinsically_convertible_tagged.hpp>
 
 namespace boost {
   namespace conversion {
@@ -148,15 +149,15 @@
     //!
     //! @Example
     //! @code
- //! Target t;
- //! Source s;
- //! t=boost::conversion::implicit_convert_to<Target>(s);
+ //! Target t;
+ //! Source s;
+ //! t=boost::conversion::implicit_convert_to<Target>(s);
     //! @endcode
     template <typename Target, typename Source>
     typename enable_if_c<
         is_extrinsically_convertible_tagged<Source, Target>::value
     , Target>::type
- implicit_convert_to(Source const& from)
+ implicit_convert_to(const Source& from)
     {
       using namespace boost::conversion::impl_2;
       //use boost::conversion::impl_2::implicit_convert_to if ADL fails

Modified: sandbox/conversion/boost/conversion/include.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/include.hpp (original)
+++ sandbox/conversion/boost/conversion/include.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -11,7 +11,7 @@
 /*!
  @file
  @brief
-Include all the core conversion public header files. Note that you will need to include explicitly the C++ standard or Boost specific files when using specific classes.
+Includes all the core conversion public header files. Note that you will need to include explicitly the C++ standard or Boost specific files when using specific classes.
  */
 
 #ifndef BOOST_CONVERSION_INCLUDE_HPP

Modified: sandbox/conversion/boost/conversion/is_extrinsically_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_assignable.hpp (original)
+++ sandbox/conversion/boost/conversion/is_extrinsically_assignable.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -12,33 +12,212 @@
  * @brief Defines the type trait @c is_extrinsically_assignable.
  */
 
-
 #ifndef BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_HPP
 #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_HPP
 
-#include <boost/conversion/assign_to.hpp>
-
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
 namespace boost {
   namespace conversion {
+ /**
+ * States if @c Target is extrinsically assignable from @c Source.
+ *
+ * Condition: @c true_type if and only if the return expression in the following code
+ * would be well-formed:
+ * @code
+ * assign_to(declval<Target>(), declval<Source>()); }
+ * @endcode
+ * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
+ *
+ */
+ template <typename Target, typename Source>
+ struct is_extrinsically_assignable {};
 
- /**
- * States if @c Target is extrinsically assignable from @c Source.
- *
- * Condition: @c true_type if and only if the return expression in the following code
- * would be well-formed:
- * @code
- * assign_to(declval<Target>(), declval<Source>()); }
- * @endcode
- *
- * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
- *
- */
- template <class Target, class Source>
- struct is_extrinsically_assignable : conversion::assigner<Target, Source> {};
+ //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_assignable type trait for classes.
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
 
   }
 }
+#else
+
+
+#include <boost/conversion/config.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/conversion/assign_to.hpp>
+
+#if ! defined BOOST_NO_DECLTYPE
+ #if defined _MSC_VER
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
+ #endif
+ #elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_DECLTYPE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #if ! defined BOOST_NO_SFINAE_EXPR
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
+ #endif
+ #else
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_SIZEOF
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_DECLTYPE
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
+ #endif
+ #else
+#error
+ //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_SIZEOF
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_DECLTYPE
+ //#define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
+ #endif
+#elif ! defined BOOST_NO_SFINAE_EXPR
+ #if defined _MSC_VER
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_SIZEOF
+#elif defined __clang__
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_SIZEOF
+ #elif defined __GNUC__
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
+ #else
+#error
+ #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_SIZEOF
+ #endif
+#else
+ #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE
+#endif
 
+#if ! defined BOOST_NO_RVALUE_REFERENCES
+ #if defined _MSC_VER
+ #elif defined __clang__
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_USES_RVALUE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_USES_RVALUE
+ #endif
+ #else
+ #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_USES_RVALUE
+ #endif
+#endif
 
+namespace boost {
+ namespace conversion {
+ namespace detail {
+ namespace is_extrinsically_assignable {
+ template <typename T, typename S,
+ bool True =
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_assignable<T,S>::value)
+ ,
+ bool False =
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value >
+ struct imp;
+
+#if defined BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_DECLTYPE
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ {
+ template <typename T1, typename S1>
+ static decltype((
+ ::boost::conversion::assign_to(declval<T1>(), declval<S1>()) // EXPR
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_USES_RVALUE
+ selector(T1&&, S1&&);
+ #else
+ selector(T1&, S1&);
+ #endif
+
+ template <typename T1, typename S1>
+ static false_type
+ selector(any,any);
+
+ typedef typename common_type<decltype(selector(declval<T>(), declval<S>()))>::type type;
+ };
+
+#elif defined BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_USES_SIZEOF
+
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ {
+ template<typename T1, typename S1>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ ::boost::conversion::assign_to(declval<T1>(), declval<S1>()) // EXPR
+ )
+ >*);
+
+ template<typename T1, typename S1>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<T,S>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
+
+#else
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ : public conversion::is_extrinsically_assignable_tagged<T,S> {};
 #endif
 
+ template <typename T, typename S, bool B>
+ struct imp<T, S, true, B>
+ : public true_type {};
+
+ template <typename T,typename S, bool B>
+ struct imp<T, S, B, true>
+ : public false_type {};
+
+ } // is_extrinsically_assignable
+ } // detail
+
+ template <typename Target, typename Source>
+ struct is_extrinsically_assignable
+ : public detail::is_extrinsically_assignable::imp<Target, Source> {};
+
+ namespace detail {
+ namespace is_extrinsically_assignable {
+ template <typename T, typename S, std::size_t N>
+ struct imp<T[N],S[N],false,false>
+ : public conversion::is_extrinsically_assignable<T,S> {};
+ template <typename T, typename S, std::size_t N>
+ struct imp<T[N],S,false,false>
+ : public false_type {};
+ template <typename T, typename S, std::size_t N>
+ struct imp<T,S[N],false,false>
+ : public false_type {};
+ template <typename T, typename S>
+ struct imp<T[],S[],false,false>
+ : public false_type {};
+ template <typename T, typename S>
+ struct imp<T[],S,false,false>
+ : public false_type {};
+ template <typename T, typename S>
+ struct imp<T,S[],false,false>
+ : public false_type {};
+ } // is_extrinsically_assignable
+ } // detail
+ } // conversion
+} // boost
+
+#endif // doc
+
+#endif // header
+

Deleted: sandbox/conversion/boost/conversion/is_extrinsically_assignable_tagged.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_assignable_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
+++ (empty file)
@@ -1,235 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-// See http://www.boost.org/libs/conversion for documentation.
-//
-//////////////////////////////////////////////////////////////////////////////
-/**
- * @file
- * @brief Defines the type trait @c is_extrinsically_assignable_tagged.
- */
-
-#ifndef BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_HPP
-#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_HPP
-
-#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
-namespace boost {
- namespace conversion {
- /**
- * States if @c Source is extrinsically assignable to @c Target.
- *
- * Condition: @c true_type if and only if the return expression in the following code
- * would be well-formed:
- * @code
- * Target test() { return implicit_convert_to<Target>(declval<Source>()); }
- * @endcode
- *
- * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
- *
- */
- template <class Source, class Target>
- struct is_extrinsically_assignable_tagged {};
-
- //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_assignable type trait for classes.
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
-
- }
-}
-#else
-
-
-#include <boost/conversion/config.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/type_traits/common_type.hpp>
-#include <boost/type_traits/is_scalar.hpp>
-#include <boost/type_traits/is_abstract.hpp>
-#include <boost/type_traits/is_void.hpp>
-#include <boost/type_traits/is_function.hpp>
-
-#include <boost/utility/declval.hpp>
-#include <boost/conversion/assign_to.hpp>
-
-
-#if ! defined BOOST_NO_DECLTYPE
- #if defined _MSC_VER
- #if ! defined BOOST_NO_SFINAE_EXPR
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
- #endif
- #elif defined __clang__
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_DECLTYPE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #if ! defined BOOST_NO_SFINAE_EXPR
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
- #endif
- #else
- //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
- //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_DECLTYPE
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
- #endif
- #else
-#error
- //#define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
- #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_DECLTYPE
- //#define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
- #endif
-#elif ! defined BOOST_NO_SFINAE_EXPR
- #if defined _MSC_VER
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
-#elif defined __clang__
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
- #elif defined __GNUC__
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
- #else
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
- #endif
-#else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_ASSIGNABLE_TAGGED
-#endif
-
-#if ! defined BOOST_NO_RVALUE_REFERENCES
- #if defined _MSC_VER
- #elif defined __clang__
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_RVALUE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #else
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_RVALUE
- #endif
- #else
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_RVALUE
- #endif
-#endif
-
-namespace boost {
- namespace conversion {
- namespace detail_is_extrinsically_assignable_tagged {
- using namespace boost::conversion_impl_2;
- struct any {
- template <typename T>
- any(T);
- };
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
-
- template <class S, class T,
- bool True =
- (is_void<S>::value && is_void<T>::value)
- || ((is_scalar<T>::value || is_reference<T>::value) && is_assignable<S,T>::value)
- ,
- bool False =
- (is_void<S>::value && !is_void<T>::value)
- || (!is_void<S>::value && is_void<T>::value)
- || is_abstract<T>::value
- || is_function<T>::value >
- struct imp;
-
-#if defined BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_DECLTYPE
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template <class S1, class T1>
- static decltype((
- assign_to(declval<S1>(), declval<T1>()) // EXPR
- , true_type()))
- #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_RVALUE
- selector(S1&&, T1&&);
- #else
- selector(S1&, T1&);
- #endif
-
- template <class S1, class T1>
- static false_type
- selector(any,any);
-
- typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
- };
-
-#elif defined BOOST_CONVERSION_IS_EXTRINSIC_ASSIGNABLE_TAGGED_USES_SIZEOF
-
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template<class X, class Y>
- static detail_is_extrinsically_assignable_tagged::yes_type
- selector(detail_is_extrinsically_assignable_tagged::dummy<
- sizeof(
- assign_to(declval<S1>(), declval<T1>()) // EXPR
- )
- >*);
-
- template<class X, class Y>
- static detail_is_extrinsically_assignable_tagged::no_type
- selector(...);
-
- static const bool value =
- sizeof(selector<S,T>(0)) ==
- sizeof(detail_is_extrinsically_assignable_tagged::yes_type);
- typedef boost::integral_constant<bool,value> type;
- };
-
-#else
- template <class S,class T>
- struct imp<S,T,false,false>
- : public conversion::assigner<T,S> {};
-#endif
-// template <class S, class T, std::size_t N>
-// struct imp<S[N],T[N],false,false>
-// : public false_type {};
-// template <class S, class T, std::size_t N>
-// struct imp<S[N],T,false,false>
-// : public false_type {};
-// template <class S, class T, std::size_t N>
-// struct imp<S,T[N],false,false>
-// : public false_type {};
-// template <class S, class T>
-// struct imp<S[],T[],false,false>
-// : public false_type {};
-// template <class S, class T>
-// struct imp<S[],T,false,false>
-// : public false_type {};
-// template <class S, class T>
-// struct imp<S,T[],false,false>
-// : public false_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, true,B>
- : public true_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, B,true>
- : public false_type {};
-
- } // detail
-
-
- template <class Source, class Target>
- struct is_extrinsically_assignable_tagged
- : public detail_is_extrinsically_assignable_tagged::imp<Source, Target> {};
-
-} // conversion
-} // boost
-
-#endif // doc
-
-#endif // header
-

Modified: sandbox/conversion/boost/conversion/is_extrinsically_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_convertible.hpp (original)
+++ sandbox/conversion/boost/conversion/is_extrinsically_convertible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -30,7 +30,7 @@
      * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
      *
      */
- template <class Source, class Target>
+ template <typename Source, typename Target>
     struct is_extrinsically_convertible {};
 
   //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_convertible type trait for classes.
@@ -54,10 +54,6 @@
 #include <boost/conversion/type_traits/is_convertible.hpp>
 #include <boost/conversion/implicit_convert_to.hpp>
 
-#if ! defined BOOST_CONVERSION_USES_SFINAE
-//#if 0
-#define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE
-#else
 #if ! defined BOOST_NO_DECLTYPE
   #if defined _MSC_VER
     #if ! defined BOOST_NO_SFINAE_EXPR
@@ -68,7 +64,7 @@
   #elif defined __clang__
     #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_USES_DECLTYPE
   #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 7 )
        #if ! defined BOOST_NO_SFINAE_EXPR
          #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_USES_SIZEOF
        #else
@@ -88,7 +84,6 @@
 #else
   #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE
 #endif
-#endif
 
 #if ! defined BOOST_NO_RVALUE_REFERENCES
   #if defined _MSC_VER
@@ -106,121 +101,109 @@
 
 namespace boost {
   namespace conversion {
+ namespace detail {
+ namespace is_extrinsically_convertible {
 
- namespace detail_is_extrinsically_convertible {
- struct any {
- template <typename T>
- any(T);
- };
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
-
- template <class S, class T,
- bool True =
- (is_void<S>::value && is_void<T>::value)
- || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
- ,
- bool False =
- (is_void<S>::value && !is_void<T>::value)
- || (!is_void<S>::value && is_void<T>::value)
- || is_abstract<T>::value
- || is_function<T>::value
- >
- struct imp;
+ template <typename S, typename T,
+ bool True =
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
+ ,
+ bool False =
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value
+ >
+ struct imp;
 
 #if defined BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_USES_DECLTYPE
 #error
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template <class S1, class T1>
- static decltype((
- ::boost::conversion::implicit_convert_to<T1>(declval<S1>()) // EXPR
- , true_type()))
- #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
- selector(S1&&, T1&&);
- #else
- selector(S1&, T1&);
- #endif
-
- template <class S1, class T1>
- static false_type
- selector(any,any);
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ {
+ template <typename S1, typename T1>
+ static decltype((
+ ::boost::conversion::implicit_convert_to<T1>(declval<S1>()) // EXPR
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
+ selector(S1&&, T1&&);
+ #else
+ selector(S1&, T1&);
+ #endif
+
+ template <typename S1, typename T1>
+ static false_type
+ selector(any,any);
 
- typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
- };
+ typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
+ };
 #elif defined BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_USES_SIZEOF
-#error
-
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template<class X, class Y>
- static detail_is_extrinsically_convertible::yes_type
- selector(detail_is_extrinsically_convertible::dummy<
- sizeof(
- ::boost::conversion::implicit_convert_to<T1>(declval<S1>()) // EXPR
- )
- >*);
 
- template<class X, class Y>
- static detail_is_extrinsically_convertible::no_type
- selector(...);
-
- static const bool value =
- sizeof(selector<S,T>(0)) ==
- sizeof(detail_is_extrinsically_convertible::yes_type);
- typedef boost::integral_constant<bool,value> type;
- };
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ {
+ template<typename S1, typename T1>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ ::boost::conversion::implicit_convert_to<T1>(declval<S1>()) // EXPR
+ )
+ >*);
+
+ template<typename X, typename Y>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<S,T>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
 
 #else
- template <class S, class T>
- struct imp<S,T,false,false>
- : public is_extrinsically_convertible_tagged<S,T> {};
-#endif
- template <class S, class T, std::size_t N>
- struct imp<S[N],T[N],false,false>
- : public false_type {};
- template <class S, class T, std::size_t N>
- struct imp<S[N],T,false,false>
- : public false_type {};
- template <class S, class T, std::size_t N>
- struct imp<S,T[N],false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S[],T[],false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S[],T,false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S,T[],false,false>
- : public false_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, true,B>
- : public true_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, B,true>
- : public false_type {};
- }
+ template <typename S, typename T>
+ struct imp<S,T,false,false>
+ : public conversion::is_extrinsically_convertible_tagged<S,T> {};
+#endif
+ template <typename S, typename T, std::size_t N>
+ struct imp<S[N],T[N],false,false>
+ : public false_type {};
+ template <typename S, typename T, std::size_t N>
+ struct imp<S[N],T,false,false>
+ : public false_type {};
+ template <typename S, typename T, std::size_t N>
+ struct imp<S,T[N],false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S[],T[],false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S[],T,false,false>
+ : public false_type {};
+ template <typename S, typename T>
+ struct imp<S,T[],false,false>
+ : public false_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<S, T, true,B>
+ : public true_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<S, T, B,true>
+ : public false_type {};
+ } // is_extrinsically_convertible
+ } // detail
+
+ template <typename Source, typename Target>
+ struct is_extrinsically_convertible
+ : public detail::is_extrinsically_convertible::imp<Source, Target> {};
 
- template <class Source, class Target>
- struct is_extrinsically_convertible
- : public detail_is_extrinsically_convertible::imp<Source, Target> {};
+ template <typename T>
+ struct is_extrinsically_convertible<fusion::void_,T> : false_type {};
 
- template <class T>
- struct is_extrinsically_convertible<fusion::void_,T> : false_type {};
-
- }
-}
+ } // conversion
+} // boost
 
 
 #endif

Deleted: sandbox/conversion/boost/conversion/is_extrinsically_convertible_tagged.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_convertible_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
+++ (empty file)
@@ -1,236 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-// See http://www.boost.org/libs/conversion for documentation.
-//
-//////////////////////////////////////////////////////////////////////////////
-/**
- * @file
- * @brief Defines the type trait @c is_extrinsically_convertible_tagged.
- */
-
-#ifndef BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_HPP
-#define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_HPP
-
-#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
-namespace boost {
- namespace conversion {
- /**
- * States if @c Source is extrinsically explicit convertible to @c Target.
- *
- * Condition: @c true_type if and only if the return expression in the following code
- * would be well-formed:
- * @code
- * Target test() { return implicit_convert_to<Target>(declval<Source>()); }
- * @endcode
- *
- * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
- *
- */
- template <class Source, class Target>
- struct is_extrinsically_convertible_tagged {};
-
- //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_convertible type trait for classes.
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
-
- }
-}
-#else
-
-
-#include <boost/conversion/config.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/type_traits/common_type.hpp>
-#include <boost/type_traits/is_scalar.hpp>
-#include <boost/type_traits/is_abstract.hpp>
-#include <boost/type_traits/is_void.hpp>
-#include <boost/type_traits/is_function.hpp>
-
-#include <boost/utility/declval.hpp>
-#include <boost/conversion/implicit_convert_to.hpp>
-
-
-#if ! defined BOOST_NO_DECLTYPE
- #if defined _MSC_VER
- #if ! defined BOOST_NO_SFINAE_EXPR
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
- #endif
- #elif defined __clang__
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_DECLTYPE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #if ! defined BOOST_NO_SFINAE_EXPR
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
- #endif
- #else
- //#define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
- //#define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_DECLTYPE
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
- #endif
- #else
-#error
- //#define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
- #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_DECLTYPE
- //#define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
- #endif
-#elif ! defined BOOST_NO_SFINAE_EXPR
- #if defined _MSC_VER
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
-#elif defined __clang__
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
- #elif defined __GNUC__
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
- #else
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
- #endif
-#else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_CONVERTIBLE_TAGGED
-#endif
-
-#if ! defined BOOST_NO_RVALUE_REFERENCES
- #if defined _MSC_VER
- #elif defined __clang__
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #else
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
- #endif
- #else
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
- #endif
-#endif
-
-namespace boost {
- namespace conversion {
- //namespace impl_2 {}
- namespace detail_is_extrinsically_convertible_tagged {
- using namespace boost::conversion::impl_2;
- struct any {
- template <typename T>
- any(T);
- };
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
-
- template <class S, class T,
- bool True =
- (is_void<S>::value && is_void<T>::value)
- || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
- ,
- bool False =
- (is_void<S>::value && !is_void<T>::value)
- || (!is_void<S>::value && is_void<T>::value)
- || is_abstract<T>::value
- || is_function<T>::value >
- struct imp;
-
-#if defined BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_DECLTYPE
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template <class S1, class T1>
- static decltype((
- implicit_convert_to(declval<S1>(), conversion::dummy::type_tag<T1>()) // EXPR
- , true_type()))
- #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_RVALUE
- selector(S1&&, T1&&);
- #else
- selector(S1&, T1&);
- #endif
-
- template <class S1, class T1>
- static false_type
- selector(any,any);
-
- typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
- };
-
-#elif defined BOOST_CONVERSION_IS_EXTRINSIC_CONVERTIBLE_TAGGED_USES_SIZEOF
-
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template<class X, class Y>
- static detail_is_extrinsically_convertible_tagged::yes_type
- selector(detail_is_extrinsically_convertible_tagged::dummy<
- sizeof(
- implicit_convert_to(declval<X>(), conversion::dummy::type_tag<Y>()) // EXPR
- )
- >*);
-
- template<class X, class Y>
- static detail_is_extrinsically_convertible_tagged::no_type
- selector(...);
-
- static const bool value =
- sizeof(selector<S,T>(0)) ==
- sizeof(detail_is_extrinsically_convertible_tagged::yes_type);
- typedef boost::integral_constant<bool,value> type;
- };
-
-#else
- template <class S,class T>
- struct imp<S,T,false,false>
- : public conversion::implicit_converter<T,S> {};
-#endif
- template <class S, class T, std::size_t N>
- struct imp<S[N],T[N],false,false>
- : public false_type {};
- template <class S, class T, std::size_t N>
- struct imp<S[N],T,false,false>
- : public false_type {};
- template <class S, class T, std::size_t N>
- struct imp<S,T[N],false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S[],T[],false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S[],T,false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S,T[],false,false>
- : public false_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, true,B>
- : public true_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, B,true>
- : public false_type {};
-
- } // detail
-
-
- template <class Source, class Target>
- struct is_extrinsically_convertible_tagged
- : public detail_is_extrinsically_convertible_tagged::imp<Source, Target> {};
-
-} // conversion
-} // boost
-
-#endif // doc
-
-#endif // header
-

Modified: sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible.hpp (original)
+++ sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -40,7 +40,6 @@
 }
 #else
 
-
 #include <boost/conversion/config.hpp>
 #include <boost/type_traits/integral_constant.hpp>
 #include <boost/type_traits/common_type.hpp>
@@ -54,9 +53,6 @@
 #include <boost/conversion/explicit_convert_to.hpp>
 #include <boost/conversion/type_traits/is_convertible.hpp>
 
-#if ! defined BOOST_CONVERSION_USES_SFINAE
-#define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE
-#else
 #if ! defined BOOST_NO_DECLTYPE
   #if defined _MSC_VER
     #if ! defined BOOST_NO_SFINAE_EXPR
@@ -67,7 +63,7 @@
   #elif defined __clang__
     #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_DECLTYPE
   #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 7 )
        #if ! defined BOOST_NO_SFINAE_EXPR
          #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_SIZEOF
        #else
@@ -87,7 +83,6 @@
 #else
   #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE
 #endif
-#endif
 
 #if ! defined BOOST_NO_RVALUE_REFERENCES
   #if defined _MSC_VER
@@ -105,119 +100,120 @@
 
 namespace boost {
   namespace conversion {
- namespace detail_is_extrinsically_explicit_convertible {
- struct any {
- template <typename T>
- any(T);
- };
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
-
- template <class S, class T,
- bool True =
- ((
- (is_void<S>::value && is_void<T>::value)
- || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
- ))
- ,
- bool False =
- ((
- (is_void<S>::value && !is_void<T>::value)
- || (!is_void<S>::value && is_void<T>::value)
- || is_abstract<T>::value
- || is_function<T>::value
- ))
- >
- struct imp;
-#if defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_DECLTYPE
-#error
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template <class S1, class T1>
- static decltype((
- ::boost::conversion::explicit_convert_to<T1>(declval<S1>()) // EXPR
- , true_type()))
- #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
- selector(S1&&, T1&&);
- #else
- selector(S1&, T1&);
- #endif
-
- template <class S1, class T1>
- static false_type
- selector(any,any);
+ namespace detail {
+ namespace is_extrinsically_explicit_convertible {
 
- typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
- };
-#elif defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_SIZEOF
+ template <class S, class T,
+ bool True =
+ ((
+ (is_void<S>::value && is_void<T>::value)
+ || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
+ ))
+ ,
+ bool False =
+ ((
+ (is_void<S>::value && !is_void<T>::value)
+ || (!is_void<S>::value && is_void<T>::value)
+ || is_abstract<T>::value
+ || is_function<T>::value
+ ))
+ >
+ struct imp;
+#if defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_DECLTYPE
 #error
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template<class X, class Y>
- static detail_is_extrinsically_explicit_convertible::yes_type
- selector(detail_is_extrinsically_explicit_convertible::dummy<
- sizeof(
+ template <class S, class T>
+ struct imp<S,T,false,false>
+ {
+ template <class S1, class T1>
+ static decltype((
               ::boost::conversion::explicit_convert_to<T1>(declval<S1>()) // EXPR
- )
- >*);
+ , true_type()))
+ #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
+ selector(S1&&, T1&&);
+ #else
+ selector(S1&, T1&);
+ #endif
+
+ template <class S1, class T1>
+ static false_type
+ selector(any,any);
 
- template<class X, class Y>
- static detail_is_extrinsically_explicit_convertible::no_type
- selector(...);
-
- static const bool value =
- sizeof(selector<S,T>(0)) ==
- sizeof(detail_is_extrinsically_explicit_convertible::yes_type);
- typedef boost::integral_constant<bool,value> type;
- };
+ typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
+ };
+#elif defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_SIZEOF
+ template <class S, class T>
+ struct imp<S,T,false,false>
+ {
+ template <class S1, class T1>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ ::boost::conversion::explicit_convert_to<T1>(declval<S1>()) // EXPR
+ )
+ >*);
+
+ template<class X, class Y>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<S,T>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
 #else
- template <class S, class T>
- struct imp<S,T,false,false>
- : public is_extrinsically_explicit_convertible_tagged<S,T> {};
+ template <class S, class T>
+ struct imp<S,T,false,false>
+ : public conversion::is_extrinsically_explicit_convertible_tagged<S,T> {};
 #endif
- template <class S, class T, std::size_t N>
- struct imp<S[N],T[N],false,false>
- : public false_type {};
- template <class S, class T, std::size_t N>
- struct imp<S[N],T,false,false>
- : public false_type {};
- template <class S, class T, std::size_t N>
- struct imp<S,T[N],false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S[],T[],false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S[],T,false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S,T[],false,false>
- : public false_type {};
-
- template <class S,class T, bool B>
- struct imp<S, T, true,B>
- : public true_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, B,true>
- : public false_type {};
- }
+ template <class S, class T, std::size_t N>
+ struct imp<S[N],T[N],false,false>
+ : public false_type {};
+ template <class S, class T, std::size_t N>
+ struct imp<S[N],T,false,false>
+ : public false_type {};
+ template <class S, class T, std::size_t N>
+ struct imp<S,T[N],false,false>
+ : public false_type {};
+ template <class S, class T>
+ struct imp<S[],T[],false,false>
+ : public false_type {};
+ template <class S, class T>
+ struct imp<S[],T,false,false>
+ : public false_type {};
+ template <class S, class T>
+ struct imp<S,T[],false,false>
+ : public false_type {};
+ template <class S, std::size_t N>
+ struct imp<S[N],S*,false,false>
+ : public true_type {};
+ template <class S, std::size_t N>
+ struct imp<S[N],const S*,false,false>
+ : public true_type {};
+ template <class S, std::size_t N>
+ struct imp<const S[N],S*,false,false>
+ : public false_type {};
+ template <class S, std::size_t N>
+ struct imp<const S[N],const S*,false,false>
+ : public true_type {};
+
+ template <class S,class T, bool B>
+ struct imp<S, T, true,B>
+ : public true_type {};
+
+ template <class S,class T,bool B>
+ struct imp<S, T, B,true>
+ : public false_type {};
+ } // is_extrinsically_explicit_convertible
+ } // detail
+
+ template <class Source, class Target>
+ struct is_extrinsically_explicit_convertible
+ : public detail::is_extrinsically_explicit_convertible::imp<Source, Target> {};
 
- template <class Source, class Target>
- struct is_extrinsically_explicit_convertible
- : public detail_is_extrinsically_explicit_convertible::imp<Source, Target> {};
-
- template <class T>
- struct is_extrinsically_explicit_convertible<fusion::void_,T> : false_type {};
-}
+ template <class T>
+ struct is_extrinsically_explicit_convertible<fusion::void_,T> : false_type {};
+ }
 }
 
 #endif // doc

Deleted: sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible2.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible2.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
+++ (empty file)
@@ -1,213 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-// See http://www.boost.org/libs/conversion for documentation.
-//
-//////////////////////////////////////////////////////////////////////////////
-/**
- * @file
- * @brief Defines the type trait @c is_extrinsically_explicit_convertible.
- */
-
-#ifndef BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_HPP
-#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_HPP
-
-
-#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
-namespace boost {
- namespace conversion {
- /**
- * States if @c Source is extrinsically explicit convertible to @c Target.
- *
- * Condition: @c true_type if and only if the return expression in the following code
- * would be well-formed:
- * @code
- * Target test() { return explicit_convert_to<Target>(declval<Source>()); }
- * @endcode
- *
- * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
- *
- */
- template <class Source, class Target>
- struct is_extrinsically_explicit_convertible {};
-
- //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_explicit_convertible type trait for classes.
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE
-
- }
-}
-#else
-
-
-#include <boost/config.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/type_traits/common_type.hpp>
-#include <boost/type_traits/is_scalar.hpp>
-#include <boost/type_traits/is_abstract.hpp>
-#include <boost/type_traits/is_void.hpp>
-#include <boost/utility/declval.hpp>
-#include <boost/fusion/tuple.hpp>
-#include <boost/conversion/explicit_convert_to.hpp>
-
-#if ! defined BOOST_NO_DECLTYPE
- #if defined _MSC_VER
- #if ! defined BOOST_NO_SFINAE_EXPR
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_SIZEOF
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE
- #endif
- #elif defined __clang__
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_DECLTYPE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #if ! defined BOOST_NO_SFINAE_EXPR
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_SIZEOF
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE
- #endif
- #else
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_DECLTYPE
- #endif
- #else
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_DECLTYPE
- #endif
-#elif ! defined BOOST_NO_SFINAE_EXPR
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_SIZEOF
- #if defined __clang__
- #elif defined __GNUC__
- #endif
-#else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE
-#endif
-
-#if ! defined BOOST_NO_RVALUE_REFERENCES
- #if defined _MSC_VER
- #elif defined __clang__
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_RVALUE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #else
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_RVALUE
- #endif
- #else
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_RVALUE
- #endif
-#endif
-
-namespace boost {
- namespace conversion {
- namespace detail_is_extrinsically_explicit_convertible {
- struct any {
- template <typename T>
- any(T);
- };
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
-
- template <class U>
- struct test
- {
- U u;
- };
- template <class T, class S, bool BothVoid = is_void<T>::value && is_void<S>::value, bool BothNonVoid = !is_void<T>::value && !is_void<S>::value >
- struct imp;
-#if defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_DECLTYPE
-
- template <class T, class S>
- decltype((boost::conversion::explicit_convert_to<T>(declval<test<S> >()), true_type()))
- #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_RVALUE
- selector(T&&, S&&);
- #else
- selector(T&, S&);
- #endif
-
- false_type
- selector(any);
-
- template <class T, class S>
- struct imp<T,S,false,true>
- : public common_type<decltype(selector(declval<T>(), declval<S>()))>::type {};
-
-#elif defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_USES_SIZEOF
-
- template <class T, class S>
- struct imp<T,S,false,true>
- {
- template<class X, class Y>
- static detail_is_extrinsically_explicit_convertible::yes_type
- selector(detail_is_extrinsically_explicit_convertible::dummy<sizeof(boost::conversion::explicit_convert_to<X>(
- declval<Y>()))>*);
-
- template<class X, class Y>
- static detail_is_extrinsically_explicit_convertible::no_type
- selector(...);
-
- static const bool value =
- sizeof(selector<T,S>(0)) == sizeof(detail_is_extrinsically_explicit_convertible::yes_type);
- typedef boost::integral_constant<bool,value> type;
- };
-
-#else
- template <class T>
- struct imp<T,S,false,true>
- : public false_type {};
-#endif
- template <class T,class S>
- struct imp<T, S, true,false>
- : public true_type {};
-
- template <class T,class S>
- struct imp<T, S, false,false>
- : public false_type {};
-
- }
-
-
- template <class Source, class Target>
- struct is_extrinsically_explicit_convertible
- : public detail_is_extrinsically_explicit_convertible::imp<Source, Target> {};
-
- template <class T>
- struct is_extrinsically_explicit_convertible<fusion::void_,T> : false_type {};
-}
-}
-
-#endif // doc
-
-#if 0
-#include <boost/fusion/tuple.hpp>
-
-namespace boost {
- namespace conversion {
-
- template <class Source, class Target>
- struct is_extrinsically_explicit_convertible : conversion::explicit_converter<Target, Source> {};
-#if !defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
- template <class T>
- struct is_extrinsically_explicit_convertible<fusion::void_,T> : false_type {};
- template <>
- struct is_extrinsically_explicit_convertible<void, void> : true_type {};
- template <>
- struct is_extrinsically_explicit_convertible<const void,void> : true_type {};
- template <>
- struct is_extrinsically_explicit_convertible<void, const void> : true_type {};
- template <>
- struct is_extrinsically_explicit_convertible<const void, const void> : true_type {};
-#endif
-
- }
-}
-#endif
-
-
-#endif
-

Deleted: sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible_tagged.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/is_extrinsically_explicit_convertible_tagged.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
+++ (empty file)
@@ -1,231 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-// See http://www.boost.org/libs/conversion for documentation.
-//
-//////////////////////////////////////////////////////////////////////////////
-/**
- * @file
- * @brief Defines the type trait @c is_extrinsically_explicit_convertible.
- */
-
-#ifndef BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_HPP
-#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_HPP
-
-
-#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
-namespace boost {
- namespace conversion {
- /**
- * States if @c Source is extrinsically explicit convertible to @c Target.
- *
- * Condition: @c true_type if and only if the return expression in the following code
- * would be well-formed:
- * @code
- * Target test() { return explicit_convert_to<Target>(declval<Source>()); }
- * @endcode
- *
- * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
- *
- */
- template <class Source, class Target>
- struct is_extrinsically_explicit_convertible_tagged {};
-
- //! Macro stating if the compiler doesn't support the features needed to define the @c is_extrinsically_explicit_convertible type trait for classes.
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
-
- }
-}
-#else
-
-
-#include <boost/conversion/config.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/type_traits/common_type.hpp>
-#include <boost/type_traits/is_scalar.hpp>
-#include <boost/type_traits/is_abstract.hpp>
-#include <boost/type_traits/is_void.hpp>
-#include <boost/type_traits/is_function.hpp>
-#include <boost/utility/declval.hpp>
-#include <boost/conversion/explicit_convert_to.hpp>
-#include <boost/conversion/type_traits/is_convertible.hpp>
-
-#if ! defined BOOST_NO_DECLTYPE
- #if defined _MSC_VER
- #if ! defined BOOST_NO_SFINAE_EXPR
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
- #endif
- #elif defined __clang__
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_DECLTYPE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #if ! defined BOOST_NO_SFINAE_EXPR
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
- #endif
- #else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
- //#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_DECLTYPE
- #endif
- #else
-#error
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_DECLTYPE
- #endif
-#elif ! defined BOOST_NO_SFINAE_EXPR
- #if defined __clang__
-#error
-#define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
- #elif defined __GNUC__
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
- #else
- #error
- #define BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
- #endif
-#else
- #define BOOST_CONVERSION_NO_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED
-#endif
-
-#if ! defined BOOST_NO_RVALUE_REFERENCES
- #if defined _MSC_VER
- #elif defined __clang__
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #else
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
- #endif
- #else
- #define BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
- #endif
-#endif
-
-namespace boost {
- namespace conversion {
- namespace impl_2 {}
- namespace detail_is_extrinsically_explicit_convertible_tagged {
- using namespace boost::conversion::impl_2;
- struct any {
- template <typename T>
- any(T);
- };
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
-
- template <class S, class T,
- bool True =
- (is_void<S>::value && is_void<T>::value)
- || ((is_scalar<T>::value || is_reference<T>::value) && is_convertible<S,T>::value)
- ,
- bool False =
- (is_void<S>::value && !is_void<T>::value)
- || (!is_void<S>::value && is_void<T>::value)
- || is_abstract<T>::value
- || is_function<T>::value
- >
- struct imp;
-
-#if defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_DECLTYPE
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template <class S1, class T1>
- static decltype((
- explicit_convert_to(declval<S1>(), conversion::dummy::type_tag<T1>()) // EXPR
- , true_type()))
- #if defined BOOST_CONVERSION_TT_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_RVALUE
- selector(S1&&, T1&&);
- #else
- selector(S1&, T1&);
- #endif
-
- template <class S1, class T1>
- static false_type
- selector(any,any);
-
- typedef typename common_type<decltype(selector(declval<S>(), declval<T>()))>::type type;
- };
-
-#elif defined BOOST_CONVERSION_IS_EXTRINSIC_EXPLICIT_CONVERTIBLE_TAGGED_USES_SIZEOF
-
- template <class S, class T>
- struct imp<S,T,false,false>
- {
- template<class X, class Y>
- static detail_is_extrinsically_explicit_convertible_tagged::yes_type
- selector(detail_is_extrinsically_explicit_convertible_tagged::dummy<
- sizeof(
- explicit_convert_to(declval<X>(), conversion::dummy::type_tag<Y>()) // EXPR
- )
- >*);
-
- template<class X, class Y>
- static detail_is_extrinsically_explicit_convertible_tagged::no_type
- selector(...);
-
- static const bool value =
- sizeof(selector<S,T>(0)) ==
- sizeof(detail_is_extrinsically_explicit_convertible_tagged::yes_type);
- typedef boost::integral_constant<bool,value> type;
- };
-
-#else
- template <class S, class T>
- struct imp<S,T,false,false>
- : public conversion::explicit_converter<T,S> {};
-#endif
- template <class S, class T, std::size_t N>
- struct imp<S[N],T[N],false,false>
- : public false_type {};
- template <class S, class T, std::size_t N>
- struct imp<S[N],T,false,false>
- : public false_type {};
- template <class S, class T, std::size_t N>
- struct imp<S,T[N],false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S[],T[],false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S[],T,false,false>
- : public false_type {};
- template <class S, class T>
- struct imp<S,T[],false,false>
- : public false_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, true,B>
- : public true_type {};
-
- template <class S,class T,bool B>
- struct imp<S, T, B,true>
- : public false_type {};
-
- } // detail
-
-
- template <class Source, class Target>
- struct is_extrinsically_explicit_convertible_tagged
- : public detail_is_extrinsically_explicit_convertible_tagged::imp<Source, Target> {};
-
-} // conversion
-} // boost
-
-#endif // doc
-
-#endif // header
-

Modified: sandbox/conversion/boost/conversion/std/pair.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/pair.hpp (original)
+++ sandbox/conversion/boost/conversion/std/pair.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -37,7 +37,7 @@
     /**
      * Partial specialization of @c implicit_converter_cp for @c std::pair of extrinsic convertibles.
      */
- template < class T1, class T2, class S1, class S2>
+ template < typename T1, typename T2, typename S1, typename S2>
     struct implicit_converter_cp< std::pair<T1,T2>, std::pair<S1,S2>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(
@@ -61,7 +61,7 @@
     /**
      * Partial specialization of @c assigner_cp for @c std::pair of extrinsic convertibles.
      */
- template < class T1, class T2, class S1, class S2>
+ template < typename T1, typename T2, typename S1, typename S2>
     struct assigner_cp< std::pair<T1,T2>, std::pair<S1,S2>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires(

Modified: sandbox/conversion/boost/conversion/std/vector.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/vector.hpp (original)
+++ sandbox/conversion/boost/conversion/std/vector.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -37,7 +37,7 @@
     /**
      * Partial specialization of @c implicit_converter_cp for @c std::vector of extrinsic convertibles.
      */
- template < class T1, class A1, class T2, class A2>
+ template < typename T1, typename A1, typename T2, typename A2>
     struct implicit_converter_cp< std::vector<T1,A1>, std::vector<T2,A2>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires
@@ -65,7 +65,7 @@
     /**
      * Partial specialization of @c assigner_cp for @c std::vector of extrinsic convertibles.
      */
- template < class T1, class A1, class T2, class A2>
+ template < typename T1, typename A1, typename T2, typename A2>
     struct assigner_cp< std::vector<T1,A1>, std::vector<T2,A2>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
         , requires

Modified: sandbox/conversion/boost/conversion/try_assign_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/try_assign_to.hpp (original)
+++ sandbox/conversion/boost/conversion/try_assign_to.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -12,42 +12,69 @@
  @brief
  Defines the free function @c try_assign_to and its customization point @c try_assigner.
 
-The function @c try_assign_to assigns the @c from parameter to the @c to parameter. Return @c true if assignment done and @c false otherwise.
-
+ The function @c try_assign_to assigns the @c from parameter to the @c to parameter. Return @c true if assignment done and @c false otherwise.
 
  */
 
 #ifndef BOOST_CONVERSION_TRY_ASSIGN_TO_HPP
 #define BOOST_CONVERSION_TRY_ASSIGN_TO_HPP
 
-/**
-The user can add the @c try_assign_to overloading on the namespace of the Source or Target classes.
-But sometimes as it is the case for the standard classes, we can not add new functions on the std namespace,
-so we need a different technique.
-
-The technique consists in partially specialize on the function @c try_assign_to on the @c boost::conversion namespace.
-For compilers for which we can not partially specialize a function a trick is used:
-instead of calling directly to the @c try_assign_to member function, @c try_assign_to calls to the static operation apply
-on a class with the same name in the namespace @c overload_workaround.
-Thus the user can specialize partially this class.
-*/
-
-
+#include <boost/conversion/config.hpp>
 #include <cstddef> //for std::size_t
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
+#include <boost/conversion/type_traits/is_default_constructible.hpp>
+#include <boost/conversion/type_traits/is_copy_constructible.hpp>
+#include <boost/conversion/type_traits/is_copy_assignable.hpp>
+#include <boost/conversion/is_extrinsically_assignable.hpp>
 
 namespace boost {
   namespace conversion {
+
     //! Customization point for @c try_assign_to.
- //!
- //! @tparam Target target type of the conversion.
- //! @tparam Source source type of the conversion.
- //! @tparam Enable A dummy template parameter that can be used for SFINAE.
- //!
- //! This struct can be specialized by the user.
- template < typename Target, typename Source, class Enable = void >
- struct try_assigner
+ //!
+ //! @tparam Target target type of the conversion.
+ //! @tparam Source source type of the conversion.
+ //! @tparam Enable A dummy template parameter that can be used for SFINAE.
+ //!
+ //! This class must be specialized by the user when the default behavior of @c try_assign_to is not satisfying.
+ template < typename Target, typename Source, typename Enable = void >
+ struct try_assigner_cp : false_type {};
+
+ //! Default @c try_converter.
+ //!
+ //! @tparam Target target type of the conversion.
+ //! @tparam Source source type of the conversion.
+ //! @tparam Enable A dummy template parameter that can be used for SFINAE.
+ //!
+ //! The default implementation relies on the @c try_assigner_cp which must be specialized by the user.
+ template < typename Target, typename Source, typename Enable = void >
+ struct try_assigner : try_assigner_cp<Target,Source,Enable> {};
+
+ //! Specialization for @c try_assigner when @c is_extrinsically_explicit_convertible<Source,Target>.
+ //!
+ //! @tparam Target target type of the conversion.
+ //! @tparam Source source type of the conversion.
+ //!
+ //! @Requires @c is_extrinsically_explicit_convertible<Source,Target>
+
+
+ template < typename Target, typename Source >
+ struct try_assigner<Target, Source,
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+ requires(
+ CopyConstructible<Target>
+ && CopyAssignable<Target>
+ && ExtrinsicallyAssignable<Target,Source>
+ )
+#else
+ typename enable_if_c<
+ is_copy_constructible<Target>::value
+ && is_copy_assignable<Target>::value
+ && is_extrinsically_assignable<Target,Source>::value
+ >::type
+#endif
+ > : true_type
     {
       //! @Requires @c Target must be CopyConstructible and @c ::boost::conversion::assign_to(to, from) must be well formed.
       //! @Effects Converts the @c from parameter to the @c to parameter, using @c assign_to.
@@ -73,9 +100,23 @@
     //! specialization for c-arrays
     //!
     template < typename Target, typename Source, std::size_t N >
- struct try_assigner<Target[N],Source[N]>
+ struct try_assigner<Target[N],Source[N],
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+ requires(
+ DefaultConstructible<Target[N]>
+ && ExtrinsicallyAssignable<Target[N],Target[N]>
+ && ExtrinsicallyAssignable<Target,Source>
+ )
+#else
+ typename enable_if_c<
+ is_default_constructible<Target[N]>::value
+ && is_extrinsically_assignable<Target[N],Target[N]>::value
+ && is_extrinsically_assignable<Target,Source>::value
+ >::type
+#endif
+ > : true_type
     {
- //! @Effects Converts the @c from parameter to the @c to parameter, using by default the assignment operator on each vector element.
+ //! @Effects Converts the @c from parameter to the @c to parameter, using by default the assignment operator on each vector element.
       //! @NoThrow
       //! @Returns the converted value if success or the fallback when conversion fails.
       bool operator()(Target(&to)[N], const Source(& from)[N])
@@ -109,7 +150,10 @@
     //! @Returns the converted value if success or the fallback when conversion fails.
     //! Forwards the call to the overload workaround, which can yet be specialized by the user for standard C++ types.
     template < typename Target, typename Source >
- bool try_assign_to(Target& to, const Source& from)
+ typename enable_if_c<
+ conversion::try_assigner<Target,Source>::value
+ , bool >::type
+ try_assign_to(Target& to, const Source& from)
     {
       return conversion::try_assigner<Target,Source>()(to, from);
     }
@@ -125,7 +169,11 @@
     }
   }
 #endif
+}
 
+#include <boost/conversion/detail/is_extrinsically_try_assignable_tagged.hpp>
+
+namespace boost {
   namespace conversion {
 
     //! @brief try to assign a target from a source
@@ -142,7 +190,10 @@
     //! bool b = boost::conversion::try_assign_to(t,s);
     //! @endcode
     template <typename Target, typename Source>
- bool try_assign_to(Target& to, const Source& from)
+ typename enable_if_c<
+ is_extrinsically_try_assignable_tagged<Target, Source>::value
+ , bool >::type
+ try_assign_to(Target& to, const Source& from)
     {
       return conversion_impl::try_assign_to_impl<Target, Source>(to, from);
     }

Modified: sandbox/conversion/boost/conversion/try_convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/try_convert_to.hpp (original)
+++ sandbox/conversion/boost/conversion/try_convert_to.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -14,40 +14,58 @@
 
  The @c try_convert_to function converts the @c from parameter to a @c Target type and returns an optional<Target>, uninitialized if conversion fails.
  
-
  */
 
 #ifndef BOOST_CONVERSION_TRY_CONVERT_TO_HPP
 #define BOOST_CONVERSION_TRY_CONVERT_TO_HPP
 
-/**
- * A user adapting specific types could need to specialize the @c try_convert_to free function if the default behavior is not satisfactory or if the specialization can perform better.
-
- * A user adapting another type could need to overload the @c try_convert_to free function
- * if the default behavior is not satisfactory.
- * The user can add the @c try_convert_to overloading on any namespace found by ADL from the @c Source or the @c Target.
- * A trick is used to overload on the return type by adding a dummy parameter having the Target.
- *
- * But sometimes, as it is the case for the standard classes,
- * we can not add new functions on the @c std namespace, so we need a different technique.
- * In this case the user can partially specialize the @c boost::conversion::overload_workaround::try_convert_to struct.
-*/
-
+#include <boost/conversion/config.hpp>
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/boost/optional.hpp>
+#include <boost/conversion/is_extrinsically_explicit_convertible.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/utility/enable_if.hpp>
 
 namespace boost {
- namespace conversion {
+ namespace conversion {
     //! Customization point for @c try_convert_to.
     //!
     //! @tparam Target target type of the conversion.
     //! @tparam Source source type of the conversion.
     //! @tparam Enable A dummy template parameter that can be used for SFINAE.
     //!
- //! This struct can be specialized by the user.
- template < typename Target, typename Source, class Enable = void >
- struct try_converter {
- //! @Requires @c Target must be CopyConstructible and @c ::boost::conversion::convert_to<Target>(from) must be well formed.
+ //! This class must be specialized by the user when the default behavior of @c try_convert_to is not satisfying.
+ template < typename Target, typename Source, typename Enable = void >
+ struct try_converter_cp : false_type {};
+
+ //! Default @c try_converter.
+ //!
+ //! @tparam Target target type of the conversion.
+ //! @tparam Source source type of the conversion.
+ //! @tparam Enable A dummy template parameter that can be used for SFINAE.
+ //!
+ //! The default implementation relies on the @c try_converter_cp which must be specialized by the user.
+ template < typename Target, typename Source, typename Enable = void >
+ struct try_converter : try_converter_cp<Target,Source,Enable> {};
+
+ //! Specialization for @c try_converter when @c is_extrinsically_explicit_convertible<Source,Target>.
+ //!
+ //! @tparam Target target type of the conversion.
+ //! @tparam Source source type of the conversion.
+ //!
+ //! @Requires @c is_extrinsically_explicit_convertible<Source,Target>
+ template < typename Target, typename Source>
+ struct try_converter<Target, Source,
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+ requires(ExtrinsicallyExplicitConvertible<Source,Target>)
+#else
+ typename enable_if_c<
+ is_extrinsically_explicit_convertible<Source,Target>::value
+ >::type
+#endif
+ > : true_type
+ {
+ //! @Requires @c ::boost::conversion::convert_to<Target>(from) must be well formed.
       //! @Effects Converts the @c from parameter to an instance of the @c Target type, using by default the conversion operator or copy constructor.
       //! @NoThrow
       //! @Returns A optional<Ratget> uninitialized when conversion fails.
@@ -74,7 +92,10 @@
       //! @Returns A optional<Target> uninitialized when conversion fails.
       //! Forwards the call to the overload workaround, which can yet be specialized by the user for standard C++ types.
       template < typename Target, typename Source >
- optional<Target> try_convert_to(const Source& from, dummy::type_tag<Target> const&) {
+ typename enable_if_c<
+ conversion::try_converter<Target,Source>::value
+ , optional<Target> >::type
+ try_convert_to(const Source& from, dummy::type_tag<Target> const&) {
         return conversion::try_converter<Target,Source>()(from);
       }
     }
@@ -87,6 +108,13 @@
       }
     }
 #endif
+ }
+}
+
+#include <boost/conversion/detail/is_extrinsically_try_convertible_tagged.hpp>
+
+namespace boost {
+ namespace conversion {
 
     //! @tparam Target target type of the conversion.
     //! @tparam Source source type of the conversion.
@@ -101,11 +129,13 @@
     //! res=boost::conversion::try_convert_to<Target>(s);
     //! @endcode
     template <typename Target, typename Source>
- optional<Target> try_convert_to(Source const& from) {
+ typename enable_if_c<
+ is_extrinsically_try_convertible_tagged<Source,Target>::value
+ , optional<Target> >::type
+ try_convert_to(Source const& from) {
       return boost::conversion::impl::try_convert_to_impl<Target>(from);
     }
   }
-
 }
 
 #endif

Modified: sandbox/conversion/boost/conversion/type_traits/boost/array.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/boost/array.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/boost/array.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -23,7 +23,7 @@
 
   // These specializations are needed because the std library implementation is not using SFINAE
 
- template <class T1, class T2, std::size_t N>
+ template <typename T1, typename T2, std::size_t N>
   struct is_assignable< boost::array<T1,N>, boost::array<T2,N> >
       : integral_constant<bool, is_assignable<T1,T2>::value >
         {};

Modified: sandbox/conversion/boost/conversion/type_traits/boost/chrono/duration.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/boost/chrono/duration.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/boost/chrono/duration.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -22,17 +22,17 @@
 namespace boost {
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
- template < class Rep, class Period >
+ template < typename Rep, typename Period >
   struct is_constructible< chrono::duration<Rep, Period> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
- template < class Rep, class Period >
+ template < typename Rep, typename Period >
   struct is_constructible< chrono::duration<Rep, Period>, chrono::duration<Rep, Period> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
- template < class Rep, class Period >
+ template < typename Rep, typename Period >
   struct is_assignable< chrono::duration<Rep, Period>&, chrono::duration<Rep, Period> const& > : true_type {};
- template < class Rep, class Period >
+ template < typename Rep, typename Period >
   struct is_assignable< chrono::duration<Rep, Period>, chrono::duration<Rep, Period> > : true_type {};
 #endif
 

Modified: sandbox/conversion/boost/conversion/type_traits/boost/chrono/time_point.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/boost/chrono/time_point.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/boost/chrono/time_point.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -22,17 +22,17 @@
 namespace boost {
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
- template < class Clock, class Duration>
+ template < typename Clock, typename Duration>
   struct is_constructible< chrono::time_point<Clock, Duration> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
- template < class Clock, class Duration>
+ template < typename Clock, typename Duration>
   struct is_constructible< chrono::time_point<Clock, Duration>, chrono::time_point<Clock, Duration> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
- template < class Clock, class Duration>
+ template < typename Clock, typename Duration>
   struct is_assignable< chrono::time_point<Clock, Duration>&, chrono::time_point<Clock, Duration> const& > : true_type {};
- template < class Clock, class Duration>
+ template < typename Clock, typename Duration>
   struct is_assignable< chrono::time_point<Clock, Duration>, chrono::time_point<Clock, Duration> > : true_type {};
 #endif
 

Modified: sandbox/conversion/boost/conversion/type_traits/boost/fusion/tuple.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/boost/fusion/tuple.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/boost/fusion/tuple.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -24,48 +24,48 @@
 namespace boost {
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
- template < class T1, class T2, class T3 >
+ template < typename T1, typename T2, typename T3 >
   struct is_constructible< fusion::tuple<T1,T2,T3> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
- template < class T1, class T2, class T3 >
+ template < typename T1, typename T2, typename T3 >
   struct is_constructible< fusion::tuple<T1,T2,T3>, fusion::tuple<T1,T2,T3> > : true_type {};
 #endif
 
 
   // these specializations are needed because the libraries define the assignment operator without using SFINAE
   // TODO Use PP library to manage with variadic templates
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_constructible< fusion::tuple<A1,A2>, fusion::tuple<B1,B2> >
     : integral_constant<bool, is_constructible<A1,B1>::value && is_constructible<A2,B2>::value >
       {};
 
- template <class A1, class A2, class A3, class B1, class B2, class B3>
+ template <typename A1, typename A2, typename A3, typename B1, typename B2, typename B3>
   struct is_constructible< fusion::tuple<A1,A2,A3>, fusion::tuple<B1,B2,B3> >
     : integral_constant<bool, is_constructible<A1,B1>::value && is_constructible<A2,B2>::value&& is_constructible<A3,B3>::value >
       {};
 
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_explicitly_convertible< fusion::tuple<A1,A2>, fusion::tuple<B1,B2> >
     : integral_constant<bool, is_explicitly_convertible<A1,B1>::value && is_explicitly_convertible<A2,B2>::value >
       {};
 
- template <class A1, class A2, class A3, class B1, class B2, class B3>
+ template <typename A1, typename A2, typename A3, typename B1, typename B2, typename B3>
   struct is_explicitly_convertible< fusion::tuple<A1,A2,A3>, fusion::tuple<B1,B2,B3> >
     : integral_constant<bool, is_explicitly_convertible<A1,B1>::value && is_explicitly_convertible<A2,B2>::value&& is_explicitly_convertible<A3,B3>::value >
       {};
 
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_assignable< fusion::tuple<A1,A2>, fusion::tuple<B1,B2> >
       : integral_constant<bool, is_assignable<A1,B1>::value && is_assignable<A2,B2>::value >
         {};
 
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_assignable< fusion::tuple<A1,A2>&, fusion::tuple<B1,B2> const&>
   : integral_constant<bool, is_assignable<A1,B1>::value && is_assignable<A2,B2>::value >
   {};
 
- template <class A1, class A2, class A3, class B1, class B2, class B3>
+ template <typename A1, typename A2, typename A3, typename B1, typename B2, typename B3>
   struct is_assignable< fusion::tuple<A1,A2,A3>, fusion::tuple<B1,B2,B3> >
     : integral_constant<bool, is_assignable<A1,B1>::value && is_assignable<A2,B2>::value&& is_assignable<A3,B3>::value >
       {};

Modified: sandbox/conversion/boost/conversion/type_traits/boost/numeric/interval.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/boost/numeric/interval.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/boost/numeric/interval.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -22,17 +22,17 @@
 namespace boost {
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
- template < class T, class P>
+ template < typename T, typename P>
   struct is_constructible< numeric::interval<T,P> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
- template < class T, class P>
+ template < typename T, typename P>
   struct is_constructible< numeric::interval<T,P>, numeric::interval<T,P> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
- template < class T, class P>
+ template < typename T, typename P>
   struct is_assignable< numeric::interval<T,P>&, numeric::interval<T,P> const& > : true_type {};
- template < class T, class P>
+ template < typename T, typename P>
   struct is_assignable< numeric::interval<T,P>, numeric::interval<T,P> > : true_type {};
 #endif
 

Modified: sandbox/conversion/boost/conversion/type_traits/boost/optional.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/boost/optional.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/boost/optional.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -22,17 +22,17 @@
 namespace boost {
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
- template < class T >
+ template < typename T >
     struct is_constructible< optional<T> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
- template < class T >
+ template < typename T >
     struct is_constructible< optional<T>, optional<T> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
- template < class T >
+ template < typename T >
     struct is_assignable< optional<T>, optional<T> > : true_type {};
- template < class T >
+ template < typename T >
     struct is_assignable< optional<T>&, optional<T> const& > : true_type {};
 #endif
 

Modified: sandbox/conversion/boost/conversion/type_traits/boost/rational.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/boost/rational.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/boost/rational.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -22,17 +22,17 @@
 namespace boost {
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
- template < class T>
+ template < typename T>
   struct is_constructible< rational<T> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
- template < class T>
+ template < typename T>
   struct is_constructible< rational<T>, rational<T> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
- template < class T>
+ template < typename T>
   struct is_assignable< rational<T>, rational<T> > : true_type {};
- template < class T>
+ template < typename T>
   struct is_assignable< rational<T>&, rational<T> const& > : true_type {};
 #endif
 

Added: sandbox/conversion/boost/conversion/type_traits/detail/any.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/detail/any.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,30 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the any type useful to catch any type on overloadin resolution.
+ */
+
+#ifndef BOOST_CONVERSION_TT_DETAIL_ANY_HPP
+#define BOOST_CONVERSION_TT_DETAIL_ANY_HPP
+
+namespace boost {
+ namespace type_traits {
+ namespace detail {
+ struct any {
+ template <typename T>
+ any(T);
+ };
+ } // detail
+ } // type_traits
+} // boost
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/type_traits/detail/dummy_size.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/detail/dummy_size.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,30 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the dummy_size useful to to accept a sizeof as parameter.
+ */
+
+#ifndef BOOST_CONVERSION_TT_DETAIL_DUMMY_SIZE_HPP
+#define BOOST_CONVERSION_TT_DETAIL_DUMMY_SIZE_HPP
+
+namespace boost {
+ namespace type_traits {
+ namespace detail {
+ //! type useful to accept a sizeof as parameter
+ template <std::size_t N>
+ struct dummy_size;
+
+ } // detail
+ } // type_traits
+} // boost
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/type_traits/detail/nat.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/detail/nat.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,28 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the any type useful to catch any type on overloadin resolution.
+ */
+
+#ifndef BOOST_CONVERSION_TT_DETAIL_NAT_HPP
+#define BOOST_CONVERSION_TT_DETAIL_NAT_HPP
+
+namespace boost {
+ namespace type_traits {
+ namespace detail {
+ //! not a type. used as default of variadic templates
+ struct nat {};
+ } // detail
+ } // type_traits
+} // boost
+
+#endif // header
+

Added: sandbox/conversion/boost/conversion/type_traits/detail/yes_no_types.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/detail/yes_no_types.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -0,0 +1,31 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009-2011. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Defines the any type useful to catch any type on overload resolution.
+ */
+
+#ifndef BOOST_CONVERSION_TT_DETAIL_YES_NO_TYPES_HPP
+#define BOOST_CONVERSION_TT_DETAIL_YES_NO_TYPES_HPP
+
+namespace boost {
+ namespace type_traits {
+ namespace detail {
+ //! type useful to compare with the sizeof
+ typedef char yes_type;
+ //! type useful to compare with the sizeof
+ struct no_type { char a[2]; };
+
+ } // detail
+ } // type_traits
+} // boost
+
+#endif // header
+

Modified: sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -15,38 +15,6 @@
 #ifndef BOOST_CONVERSION_TT_IS_ASSIGNABLE_HPP
 #define BOOST_CONVERSION_TT_IS_ASSIGNABLE_HPP
 
-#include <boost/config.hpp>
-#include <boost/utility/enable_if.hpp>
-
-#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
- //! Macro stating if the compiler don't support the features needed to define the @c is_assignable type trait.
- #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
-#else
- #if ! defined(BOOST_NO_DECLTYPE)
- #if defined _MSC_VER
- #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
- #elif defined __clang__
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
- #endif
- #else
- #endif
- #else
- #if defined _MSC_VER
- #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
- #elif defined __clang__
- //#define BOOST_CONVERSION_NO_IS_ASSIGNABLE
- #elif defined __GNUC__
- #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
- #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
- #endif
- #else
- #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
- #endif
- #endif
-#endif
-
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
 namespace boost {
 
@@ -58,207 +26,238 @@
    *
    * @Requires @c Target and @c Source must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
    */
- template < class Target, class Source>
+ template < typename Target, typename Source>
   struct is_assignable
   {};
+ //! Macro stating if the compiler don't support the features needed to define the @c is_assignable type trait.
+ #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
 }
 #else
+#include <boost/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
 
-#if !defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
+#if ! defined BOOST_NO_RVALUE_REFERENCES
+ #if defined _MSC_VER
+ #elif defined __clang__
+ #define BOOST_CONVERSION_TT_IS_ASSIGNABLE_USES_RVALUE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #else
+ #define BOOST_CONVERSION_TT_IS_ASSIGNABLE_USES_RVALUE
+ #endif
+ #else
+ #define BOOST_CONVERSION_TT_IS_ASSIGNABLE_USES_RVALUE
+ #endif
+#endif
+
+#if defined(BOOST_IS_ASSIGNABLE)
+#define BOOST_CONVERSION_IS_ASSIGNABLE_USES_INTRINSICS
+#elif ! defined(BOOST_NO_DECLTYPE)
+ #if defined _MSC_VER
+ #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
+ #elif defined __clang__
+ #error
+ #define BOOST_CONVERSION_IS_ASSIGNABLE_USES_DECLTYPE
+ #elif defined __GNUC__
+ #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )
+ #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
+ #else
+ #define BOOST_CONVERSION_IS_ASSIGNABLE_USES_DECLTYPE
+ #endif
+ #else
+ #endif
+#elif ! defined BOOST_NO_SFINAE_EXPR
+ #if defined _MSC_VER
+ #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
+ #elif defined __clang__
+ #define BOOST_CONVERSION_IS_ASSIGNABLE_USES_SIZEOF
+ #elif defined __GNUC__
+ #define BOOST_CONVERSION_IS_ASSIGNABLE_USES_SIZEOF
+ #else
+ #define BOOST_CONVERSION_IS_ASSIGNABLE_USES_SIZEOF
+ #endif
+#else
+ #define BOOST_CONVERSION_NO_IS_ASSIGNABLE
+#endif
 
-#include <boost/type_traits/intrinsics.hpp>
 #if !defined(BOOST_IS_ASSIGNABLE)
+#include <boost/utility/enable_if.hpp>
+#include <boost/conversion/type_traits/detail/any.hpp>
+#include <boost/conversion/type_traits/detail/yes_no_types.hpp>
+#include <boost/conversion/type_traits/detail/dummy_size.hpp>
 #include <boost/type_traits/integral_constant.hpp>
 #include <boost/type_traits/common_type.hpp>
 #include <boost/utility/declval.hpp>
-#if defined(BOOST_NO_DECLTYPE)
-#include <boost/typeof/typeof.hpp>
-#endif // defined(BOOST_NO_DECLTYPE)
 #endif // !defined(BOOST_IS_ASSIGNABLE)
 
-
-
 // should be always the last #include directive
 #include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 #ifndef BOOST_IS_ASSIGNABLE
+ namespace type_traits {
+ namespace detail {
+ namespace is_assignable {
+ template <typename T,typename S,
+ bool True = false,
+ bool False = false >
+ struct imp;
+
+#if defined BOOST_CONVERSION_IS_ASSIGNABLE_USES_DECLTYPE
+
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ {
+ template <typename T1, typename S1>
+ static decltype((
+ declval<T1>() = declval<S1>()
+ , true_type()))
+ selector(int);
+
+ template <typename T1, typename S1>
+ static false_type
+ selector(...);
+
+ typedef decltype(selector<T,S>(0)) type;
+ };
+
+#elif defined BOOST_CONVERSION_IS_ASSIGNABLE_USES_SIZEOF
+
+ template <typename T, typename S>
+ struct imp<T,S,false,false>
+ {
+ template<typename T1, typename S1>
+ static yes_type
+ selector(dummy_size<
+ sizeof(
+ declval<T1>() = declval<S1>()
+ )
+ >*);
+
+ template<typename T1, typename S1>
+ static no_type
+ selector(...);
+
+ static const bool value =
+ sizeof(selector<T,S>(0)) ==
+ sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
+
+#else
+ template <typename T,typename S>
+ struct imp<T,S,false,false>
+ : public false_type {};
+
+ template <> struct imp< bool&, bool const&, false, false> : true_type {};
+
+ template <> struct imp< int&, int, false, false > : true_type {};
+ template <> struct imp< int&, int&, false, false > : true_type {};
+ template <> struct imp< int&, int const&, false, false > : true_type {};
+ template <> struct imp< int&, double, false, false > : true_type {};
+ template <> struct imp< int&, short const&, false, false > : true_type {};
+ template <> struct imp< short&, int const&, false, false > : true_type {};
+ template <> struct imp< float, int, false, false > : true_type {};
+ template <> struct imp< int, float, false, false > : true_type {};
+
+ template <> struct imp< char, char, false, false > : true_type {};
+ template <> struct imp< char, unsigned char, false, false > : true_type {};
+ template <> struct imp< char, short, false, false > : true_type {};
+ template <> struct imp< char, unsigned short, false, false > : true_type {};
+ template <> struct imp< char, int, false, false > : true_type {};
+ template <> struct imp< char, unsigned int, false, false > : true_type {};
+ template <> struct imp< char, long, false, false > : true_type {};
+ template <> struct imp< char, unsigned long, false, false > : true_type {};
+
+ template <> struct imp< char, char const&, false, false > : true_type {};
+ template <> struct imp< char, short const&, false, false > : true_type {};
+ template <> struct imp< char, int const&, false, false > : true_type {};
+ template <> struct imp< char, long const&, false, false > : true_type {};
+ template <> struct imp< char, unsigned char const&, false, false > : true_type {};
+ template <> struct imp< char, unsigned short const&, false, false > : true_type {};
+ template <> struct imp< char, unsigned int const&, false, false > : true_type {};
+ template <> struct imp< char, unsigned long const&, false, false > : true_type {};
+
+ template <> struct imp< short, char, false, false > : true_type {};
+ template <> struct imp< short, unsigned char, false, false > : true_type {};
+ template <> struct imp< short, short, false, false > : true_type {};
+ template <> struct imp< short, unsigned short, false, false > : true_type {};
+ template <> struct imp< short, int, false, false > : true_type {};
+ template <> struct imp< short, unsigned int, false, false > : true_type {};
+ template <> struct imp< short, long, false, false > : true_type {};
+ template <> struct imp< short, unsigned long, false, false > : true_type {};
+
+ template <> struct imp< short, char const&, false, false > : true_type {};
+ template <> struct imp< short, short const&, false, false > : true_type {};
+ template <> struct imp< short, int const&, false, false > : true_type {};
+ template <> struct imp< short, long const&, false, false > : true_type {};
+ template <> struct imp< short, unsigned char const&, false, false > : true_type {};
+ template <> struct imp< short, unsigned short const&, false, false > : true_type {};
+ template <> struct imp< short, unsigned int const&, false, false > : true_type {};
+ template <> struct imp< short, unsigned long const&, false, false > : true_type {};
+
+ template <> struct imp< int, char, false, false > : true_type {};
+ template <> struct imp< int, unsigned char, false, false > : true_type {};
+ template <> struct imp< int, short, false, false > : true_type {};
+ template <> struct imp< int, unsigned short, false, false > : true_type {};
+ template <> struct imp< int, int, false, false > : true_type {};
+ template <> struct imp< int, unsigned int, false, false > : true_type {};
+ template <> struct imp< int, long, false, false > : true_type {};
+ template <> struct imp< int, unsigned long, false, false > : true_type {};
+
+ template <> struct imp< int, char const&, false, false > : true_type {};
+ template <> struct imp< int, short const&, false, false > : true_type {};
+ template <> struct imp< int, int const&, false, false > : true_type {};
+ template <> struct imp< int, long const&, false, false > : true_type {};
+ template <> struct imp< int, unsigned char const&, false, false > : true_type {};
+ template <> struct imp< int, unsigned short const&, false, false > : true_type {};
+ template <> struct imp< int, unsigned int const&, false, false > : true_type {};
+ template <> struct imp< int, unsigned long const&, false, false > : true_type {};
+
+ template <> struct imp< long, char, false, false > : true_type {};
+ template <> struct imp< long, unsigned char, false, false > : true_type {};
+ template <> struct imp< long, short, false, false > : true_type {};
+ template <> struct imp< long, unsigned short, false, false > : true_type {};
+ template <> struct imp< long, int, false, false > : true_type {};
+ template <> struct imp< long, unsigned int, false, false > : true_type {};
+ template <> struct imp< long, long, false, false > : true_type {};
+ template <> struct imp< long, unsigned long, false, false > : true_type {};
+
+ template <> struct imp< long, char const&, false, false > : true_type {};
+ template <> struct imp< long, short const&, false, false > : true_type {};
+ template <> struct imp< long, int const&, false, false > : true_type {};
+ template <> struct imp< long, long const&, false, false > : true_type {};
+ template <> struct imp< long, unsigned char const&, false, false > : true_type {};
+ template <> struct imp< long, unsigned short const&, false, false > : true_type {};
+ template <> struct imp< long, unsigned int const&, false, false > : true_type {};
+ template <> struct imp< long, unsigned long const&, false, false > : true_type {};
+#endif
+
+ template <typename T,typename S,bool B>
+ struct imp<T, S, true, B>
+ : public true_type {};
+
+ template <typename S,typename T,bool B>
+ struct imp<T, S, B, true>
+ : public false_type {};
 
- namespace detail {
-
- namespace is_assignable {
-#if 0
-#ifdef BOOST_NO_SFINAE_EXPR
- typedef char yes_type;
- struct no_type { char a[2]; };
-
- template<std::size_t N>
- struct dummy;
-
- template <class Target, class Source>
- struct impl
- {
- Target t;
- template <typename X>
- static yes_type
- test(dummy<sizeof(declval<X>() = declval<Source>())>*);
-
- template <typename X>
- static no_type
- test(...);
- static const bool value = sizeof(test<Target>(0)) == sizeof(yes_type);
-
- typedef boost::integral_constant<bool,value> type;
- };
-#else // BOOST_NO_SFINAE_EXPR
- template <class Target, class Source>
- struct impl : false_type {};
-#endif // BOOST_NO_SFINAE_EXPR
-
-#else // 0
-
- template <class Target, class Source>
-#if !defined(BOOST_NO_DECLTYPE)
- decltype((declval<Target>() = declval<Source>(), true_type()))
-#else
- BOOST_TYPEOF_TPL((declval<Target>() = declval<Source>(), true_type()))
-#endif
- test(int);
-
- template <class, class>
- static false_type test(...);
-
- template<class T, class U>
- struct impl {
-#if !defined(BOOST_NO_DECLTYPE)
- typedef decltype(test<T, U>(0)) type;
-#else
- typedef BOOST_TYPEOF_TPL((test<T, U>(0))) type;
-#endif
- };
-#endif //0
-
+ }
     }
   }
- BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_assignable,To,From,(::boost::detail::is_assignable::impl<To,From>::type::value))
-#else
+ BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_assignable,To,From,(::boost::type_traits::detail::is_assignable::imp<To,From>::type::value))
+#else // BOOST_IS_ASSIGNABLE
 
   BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_assignable,To,From,BOOST_IS_ASSIGNABLE(To,From))
 
-#endif
+#endif // BOOST_IS_ASSIGNABLE
 
 
 }
 
 #include <boost/type_traits/detail/bool_trait_undef.hpp>
-#else
-#include <boost/type_traits/integral_constant.hpp>
 
-namespace boost {
 
- /**
- * States if the @c Target is assignable from the @c Source.
- *
- * Condition: @c true_type if <c>declval<Target>() = declval<Source>()</c> is well-formed when treated as an
- * unevaluated operand. Access checking is performed as if in a context unrelated to T and U.
- *
- * @Requires @c Target and @c Source shall be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
- */
-
- template < class Target, class Source>
- struct is_assignable : false_type
- {};
-
- // these specialization are needed because the compiler doesn't support SFINAE on expression
+#endif // doc
 
- template <> struct is_assignable< bool&, bool const& > : true_type {};
-
- template <> struct is_assignable< int&, int > : true_type {};
- template <> struct is_assignable< int&, int& > : true_type {};
- template <> struct is_assignable< int&, int const& > : true_type {};
- template <> struct is_assignable< int&, double > : true_type {};
- template <> struct is_assignable< int&, short const& > : true_type {};
- template <> struct is_assignable< short&, int const& > : true_type {};
- template <> struct is_assignable< float, int > : true_type {};
- template <> struct is_assignable< int, float > : true_type {};
-
- template <> struct is_assignable< char, char > : true_type {};
- template <> struct is_assignable< char, unsigned char > : true_type {};
- template <> struct is_assignable< char, short > : true_type {};
- template <> struct is_assignable< char, unsigned short > : true_type {};
- template <> struct is_assignable< char, int > : true_type {};
- template <> struct is_assignable< char, unsigned int > : true_type {};
- template <> struct is_assignable< char, long > : true_type {};
- template <> struct is_assignable< char, unsigned long > : true_type {};
-
- template <> struct is_assignable< char, char const& > : true_type {};
- template <> struct is_assignable< char, short const& > : true_type {};
- template <> struct is_assignable< char, int const& > : true_type {};
- template <> struct is_assignable< char, long const& > : true_type {};
- template <> struct is_assignable< char, unsigned char const& > : true_type {};
- template <> struct is_assignable< char, unsigned short const& > : true_type {};
- template <> struct is_assignable< char, unsigned int const& > : true_type {};
- template <> struct is_assignable< char, unsigned long const& > : true_type {};
-
- template <> struct is_assignable< short, char > : true_type {};
- template <> struct is_assignable< short, unsigned char > : true_type {};
- template <> struct is_assignable< short, short > : true_type {};
- template <> struct is_assignable< short, unsigned short > : true_type {};
- template <> struct is_assignable< short, int > : true_type {};
- template <> struct is_assignable< short, unsigned int > : true_type {};
- template <> struct is_assignable< short, long > : true_type {};
- template <> struct is_assignable< short, unsigned long > : true_type {};
-
- template <> struct is_assignable< short, char const& > : true_type {};
- template <> struct is_assignable< short, short const& > : true_type {};
- template <> struct is_assignable< short, int const& > : true_type {};
- template <> struct is_assignable< short, long const& > : true_type {};
- template <> struct is_assignable< short, unsigned char const& > : true_type {};
- template <> struct is_assignable< short, unsigned short const& > : true_type {};
- template <> struct is_assignable< short, unsigned int const& > : true_type {};
- template <> struct is_assignable< short, unsigned long const& > : true_type {};
-
- template <> struct is_assignable< int, char > : true_type {};
- template <> struct is_assignable< int, unsigned char > : true_type {};
- template <> struct is_assignable< int, short > : true_type {};
- template <> struct is_assignable< int, unsigned short > : true_type {};
- template <> struct is_assignable< int, int > : true_type {};
- template <> struct is_assignable< int, unsigned int > : true_type {};
- template <> struct is_assignable< int, long > : true_type {};
- template <> struct is_assignable< int, unsigned long > : true_type {};
-
- template <> struct is_assignable< int, char const& > : true_type {};
- template <> struct is_assignable< int, short const& > : true_type {};
- template <> struct is_assignable< int, int const& > : true_type {};
- template <> struct is_assignable< int, long const& > : true_type {};
- template <> struct is_assignable< int, unsigned char const& > : true_type {};
- template <> struct is_assignable< int, unsigned short const& > : true_type {};
- template <> struct is_assignable< int, unsigned int const& > : true_type {};
- template <> struct is_assignable< int, unsigned long const& > : true_type {};
-
- template <> struct is_assignable< long, char > : true_type {};
- template <> struct is_assignable< long, unsigned char > : true_type {};
- template <> struct is_assignable< long, short > : true_type {};
- template <> struct is_assignable< long, unsigned short > : true_type {};
- template <> struct is_assignable< long, int > : true_type {};
- template <> struct is_assignable< long, unsigned int > : true_type {};
- template <> struct is_assignable< long, long > : true_type {};
- template <> struct is_assignable< long, unsigned long > : true_type {};
-
- template <> struct is_assignable< long, char const& > : true_type {};
- template <> struct is_assignable< long, short const& > : true_type {};
- template <> struct is_assignable< long, int const& > : true_type {};
- template <> struct is_assignable< long, long const& > : true_type {};
- template <> struct is_assignable< long, unsigned char const& > : true_type {};
- template <> struct is_assignable< long, unsigned short const& > : true_type {};
- template <> struct is_assignable< long, unsigned int const& > : true_type {};
- template <> struct is_assignable< long, unsigned long const& > : true_type {};
-
-}
-
-#endif
-
-#endif
-
-#endif
+#endif // header
 

Modified: sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -31,7 +31,7 @@
    *
    * @Requires @c T and all types in the parameter pack @c Args must be complete types, (possibly cv-qualified) void, or arrays of unknown bound.
    */
- template < class T, class... Args>
+ template < typename T, typename... Args>
   struct is_constructible
   {};
 
@@ -46,6 +46,10 @@
 #else
 
 #include <boost/config.hpp>
+#include <boost/conversion/type_traits/detail/nat.hpp>
+#include <boost/conversion/type_traits/detail/any.hpp>
+#include <boost/conversion/type_traits/detail/yes_no_types.hpp>
+#include <boost/conversion/type_traits/detail/dummy_size.hpp>
 #include <boost/preprocessor/repetition/enum_params.hpp>
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
 #include <boost/preprocessor/repetition/repeat.hpp>
@@ -106,180 +110,164 @@
   #define BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE
 #endif
 
-namespace boost {
- namespace type_traits_detail_is_constructible {
- //! type used instead of ... to accept any type
- struct any {
- template <typename T>
- any(T);
- };
 
- //! not a type. used as default of variadic templates
- struct nat {};
-
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
- }
-}
 #ifndef BOOST_NO_VARIADIC_TEMPLATES
 namespace boost {
- namespace type_traits_detail_is_constructible {
+ namespace type_traits {
+ namespace detail {
+ namespace is_constructible {
 
-
- // template <class T, class... Args> struct is_constructible;
-
- // main is_constructible test
+ // main is_constructible test
 #if defined BOOST_CONVERSION_IS_CONSTRUCTIBLE_USES_DECLTYPE
- #ifndef BOOST_NO_RVALUE_REFERENCES
- template <class T, class ...Args>
- //decltype(move(T(declval<Args>()...)), true_type())
- decltype(T(declval<Args>()...), true_type())
- test(T&&, Args&& ...);
- template <class ...Args>
- false_type
- test(any, Args&& ...);
- #else
- template <class T, class ...Args>
- decltype(T(declval<Args>()...), true_type())
- test(T&, Args& ...);
- template <class ...Args>
- false_type
- test(any, Args& ...);
- #endif
-
- template <bool, class T, class... Args>
- struct imp // false, T is not a scalar
- : public common_type
- <
- decltype(test(declval<T>(), declval<Args>()...))
- >::type
+ #ifndef BOOST_NO_RVALUE_REFERENCES
+ template <typename T, typename ...Args>
+ //decltype(move(T(declval<Args>()...)), true_type())
+ decltype(T(declval<Args>()...), true_type())
+ test(T&&, Args&& ...);
+ template <typename ...Args>
+ false_type
+ test(any, Args&& ...);
+ #else
+ template <typename T, typename ...Args>
+ decltype(T(declval<Args>()...), true_type())
+ test(T&, Args& ...);
+ template <typename ...Args>
+ false_type
+ test(any, Args& ...);
+ #endif
+
+ template <bool, typename T, typename... Args>
+ struct imp // false, T is not a scalar
+ : public common_type
+ <
+ decltype(test(declval<T>(), declval<Args>()...))
+ >::type
         {};
 #elif defined BOOST_CONVERSION_IS_CONSTRUCTIBLE_USES_SIZEOF
 
- template <bool, class T, class... Args>
- struct imp // false, T is not a scalar
- {
- template<class X>
- static type_traits_detail_is_constructible::yes_type
- test(type_traits_detail_is_constructible::dummy<sizeof(X(declval<Args>()...))>*);
-
- template<class X>
- static type_traits_detail_is_constructible::no_type
- test(...);
-
- static const bool value =
- sizeof(test<T>(0)) == sizeof(type_traits_detail_is_constructible::yes_type);
- typedef boost::integral_constant<bool,value> type;
- };
+ template <bool, typename T, typename... Args>
+ struct imp // false, T is not a scalar
+ {
+ template<typename X>
+ static yes_type
+ test(dummy_size<sizeof(X(declval<Args>()...))>*);
+
+ template<typename X>
+ static no_type
+ test(...);
+
+ static const bool value =
+ sizeof(test<T>(0)) == sizeof(yes_type);
+ typedef boost::integral_constant<bool,value> type;
+ };
 
 
 #else
- template <bool, class T, class... Args>
- struct imp // false, T is not a scalar
- : public false_type
- {};
+ template <bool, typename T, typename... Args>
+ struct imp // false, T is not a scalar
+ : public false_type
+ {};
 #endif
 
- // function types are not constructible
+ // function types are not constructible
 
- template <class R, class... A1, class... A2>
- struct imp<false, R(A1...), A2...>
- : public false_type
- {};
+ template <typename R, typename... A1, typename... A2>
+ struct imp<false, R(A1...), A2...>
+ : public false_type
+ {};
 
- // handle scalars and reference types
+ // handle scalars and reference types
 
- // Scalars are default constructible, references are not
+ // Scalars are default constructible, references are not
 
- template <class T>
- struct imp<true, T>
- : public is_scalar<T>
- {};
+ template <typename T>
+ struct imp<true, T>
+ : public is_scalar<T>
+ {};
 
- // Scalars and references are constructible from one arg if that arg is
- // implicitly convertible to the scalar or reference.
+ // Scalars and references are constructible from one arg if that arg is
+ // implicitly convertible to the scalar or reference.
 
- template <class T, class A0>
- struct imp<true, T, A0> : is_convertible<A0,T>
- {};
+ template <typename T, typename A0>
+ struct imp<true, T, A0> : is_convertible<A0,T>
+ {};
 
- // Scalars and references are not constructible from multiple args.
+ // Scalars and references are not constructible from multiple args.
 
- template <class T, class A0, class ...Args>
- struct imp<true, T, A0, Args...>
- : public false_type
- {};
+ template <typename T, typename A0, typename ...Args>
+ struct imp<true, T, A0, Args...>
+ : public false_type
+ {};
 
- // Treat scalars and reference types separately
+ // Treat scalars and reference types separately
 
- template <bool, class T, class... Args>
- struct void_check
- : public imp<is_scalar<T>::value || is_reference<T>::value,
- T, Args...>
- {};
+ template <bool, typename T, typename... Args>
+ struct void_check
+ : public imp<is_scalar<T>::value || is_reference<T>::value,
+ T, Args...>
+ {};
 
- // If any of T or Args is void, is_constructible should be false
+ // If any of T or Args is void, is_constructible should be false
 
- template <class T, class... Args>
- struct void_check<true, T, Args...>
- : public false_type
- {};
+ template <typename T, typename... Args>
+ struct void_check<true, T, Args...>
+ : public false_type
+ {};
 
- template <class ...Args> struct contains_void;
+ template <typename ...Args> struct contains_void;
 
- template <> struct contains_void<> : false_type {};
+ template <> struct contains_void<> : false_type {};
 
- template <class A0, class ...Args>
- struct contains_void<A0, Args...>
- {
- static const bool value = is_void<A0>::value ||
- contains_void<Args...>::value;
- };
+ template <typename A0, typename ...Args>
+ struct contains_void<A0, Args...>
+ {
+ static const bool value = is_void<A0>::value ||
+ contains_void<Args...>::value;
+ };
 
- }
+ } // is_constructible
+ } // detail
+ } // type_traits
 
   // is_constructible entry point
 
- template <class T, class... Args>
+ template <typename T, typename... Args>
   struct is_constructible
- : public type_traits_detail_is_constructible::void_check<
- type_traits_detail_is_constructible::contains_void<T, Args...>::value
+ : public type_traits::detail::is_constructible::void_check<
+ type_traits::detail::is_constructible::contains_void<T, Args...>::value
                                           || is_abstract<T>::value,
                                              T, Args...>
       {};
 
- namespace type_traits_detail_is_constructible {
-
+ namespace type_traits {
+ namespace detail {
+ namespace is_constructible {
     // Array types are default constructible if their element type
     // is default constructible
 
- template <class A, size_t N>
+ template <typename A, size_t N>
     struct imp<false, A[N]>
- : public is_constructible<typename remove_all_extents<A>::type>
+ : public ::boost::is_constructible<typename remove_all_extents<A>::type>
         {};
 
     // Otherwise array types are not constructible by this syntax
 
- template <class A, size_t N, class ...Args>
+ template <typename A, size_t N, typename ...Args>
     struct imp<false, A[N], Args...>
         : public false_type
         {};
 
     // Incomplete array types are not constructible
 
- template <class A, class ...Args>
+ template <typename A, typename ...Args>
     struct imp<false, A[], Args...>
         : public false_type
         {};
 
- }
-}
+ } // is_constructible
+ } // detail
+ } // type_traits
+} // boost
 #else // BOOST_NO_VARIADIC_TEMPLATES
 
 /////////////////
@@ -290,14 +278,16 @@
 
 namespace boost {
 
- template <class T, BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_INC(BOOST_CONVERSION_TT_IS_CONSTRUCTIBLE_ARITY_MAX), class A, = type_traits_detail_is_constructible::nat BOOST_PP_INTERCEPT)> \
+ template <typename T, BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_INC(BOOST_CONVERSION_TT_IS_CONSTRUCTIBLE_ARITY_MAX), typename A, = type_traits::detail::nat BOOST_PP_INTERCEPT)> \
   struct is_constructible;
 
- namespace type_traits_detail_is_constructible {
+ namespace type_traits {
+ namespace detail {
+ namespace is_constructible {
 #if defined BOOST_CONVERSION_IS_CONSTRUCTIBLE_USES_DECLTYPE
 
     // specific test functions for 0 args which are not templates
- template <class T>
+ template <typename T>
     decltype((T(), true_type()))
     test0(T&);
     false_type
@@ -307,7 +297,7 @@
 #define M1(z,n,t) declval<A##n>()
 
 #define M0(z,n,t) \
- template <class T, BOOST_PP_ENUM_PARAMS(n, class A)> \
+ template <typename T, BOOST_PP_ENUM_PARAMS(n, typename A)> \
   decltype((T(BOOST_PP_ENUM(n, M1, ~)), true_type())) \
   test##n(T&, BOOST_PP_ENUM_PARAMS(n, A));
 
@@ -317,7 +307,7 @@
 
     // specific negative test functions for #Args>0
 #define M0(z,n,t) \
- template <BOOST_PP_ENUM_PARAMS(n, class A)> \
+ template <BOOST_PP_ENUM_PARAMS(n, typename A)> \
   false_type \
   test##n(any, BOOST_PP_ENUM_PARAMS(n, A));
 
@@ -330,7 +320,7 @@
 
 #define M1(z,n,t) declval<A##n>()
 #define M0(z,n,t) \
- template <bool, class T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class A)> \
+ template <bool, typename T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename A)> \
     struct imp##n : public common_type \
                  < \
         decltype(test##n(declval<T&>() BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, M1, ~))) \
@@ -350,19 +340,19 @@
 #define M1(z,n,t) declval<A##n>()
 
 #define M0(z,n,t) \
-template<bool, class T, BOOST_PP_ENUM_PARAMS(n, class A)> \
+template<bool, typename T, BOOST_PP_ENUM_PARAMS(n, typename A)> \
 struct imp##n \
 { \
- template<class X> \
- static type_traits_detail_is_constructible::yes_type \
- test(type_traits_detail_is_constructible::dummy<sizeof(X(BOOST_PP_ENUM(n, M1, ~)))>*); \
+ template<typename X> \
+ static yes_type \
+ test(dummy_size<sizeof(X(BOOST_PP_ENUM(n, M1, ~)))>*); \
                                                                                                     \
- template<class X> \
- static type_traits_detail_is_constructible::no_type \
+ template<typename X> \
+ static no_type \
     test(...); \
                                                                                                     \
     static const bool value = \
- sizeof(test<T>(0)) == sizeof(type_traits_detail_is_constructible::yes_type); \
+ sizeof(test<T>(0)) == sizeof(yes_type); \
     typedef boost::integral_constant<bool,value> type; \
 };
 
@@ -375,22 +365,22 @@
 // specialization for void, abstract, function or any of the parameters is void, scalar or reference
 // and no arg:
 // depend is whether X() seen as a constructor call is well formed
- template<bool, class T>
+ template<bool, typename T>
     struct imp0
     {
- template<class X>
- static type_traits_detail_is_constructible::yes_type
- test(type_traits_detail_is_constructible::dummy<sizeof(X(),int())>*);
+ template<typename X>
+ static yes_type
+ test(dummy_size<sizeof(X(),int())>*);
 
- template<class X>
- static type_traits_detail_is_constructible::no_type
+ template<typename X>
+ static no_type
         test(...);
 
- static const bool value = sizeof(test<T>(0)) == sizeof(type_traits_detail_is_constructible::yes_type);
+ static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
         typedef boost::integral_constant<bool,value> type;
     };
 #else
- template<bool, class T>
+ template<bool, typename T>
     struct imp0 : public false_type {};
 #endif
 
@@ -403,7 +393,7 @@
 // always false. The user of the library needs to specialize this trait for its owns types.
 
 #define M0(z,n,t) \
-template<bool, class T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class A)> \
+template<bool, typename T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename A)> \
 struct imp##n \
   : boost::false_type \
 { \
@@ -415,20 +405,20 @@
 #endif
 
 // specialization for scalar or reference with 1 arg: depend is the arg is scalar
- template <class T>
+ template <typename T>
       struct imp0<true, T>
           : public is_scalar<T>
           {};
 
 // specialization for scalar or reference with 1 arg: depend is the arg is convertible to the type
- template <class T, class A1>
+ template <typename T, typename A1>
       struct imp1<true, T, A1>
           : public is_convertible<A1, T>
           {};
 // specialization for scalar or reference with multiple args: always false
 
 #define M0(z,n,t) \
-template <class T, BOOST_PP_ENUM_PARAMS(n, class A)> \
+template <typename T, BOOST_PP_ENUM_PARAMS(n, typename A)> \
 struct imp##n<true, T, BOOST_PP_ENUM_PARAMS(n, A) > \
   : public false_type \
   {};
@@ -440,7 +430,7 @@
       // depends on whether the type is scalar or reference
 
 #define M0(z,n,t) \
- template <bool, class T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class A)> \
+ template <bool, typename T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename A)> \
   struct void_check##n \
     : public imp##n<is_scalar<T>::value || is_reference<T>::value, \
                               T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, A)> \
@@ -451,7 +441,7 @@
 
 // specialization for void, abstract, function or any of the parameters is void: always false
 #define M0(z,n,t) \
- template <class T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class A)> \
+ template <typename T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename A)> \
   struct void_check##n<true, T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, A)> \
     : public false_type \
   {};
@@ -463,7 +453,7 @@
 // specialization for unbounded arrays: always false
 
 #define M0(z,n,t) \
- template <class A BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class A)> \
+ template <typename A BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename A)> \
   struct imp##n<false, A[] BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, A)> \
     : public false_type \
   {};
@@ -471,16 +461,18 @@
 BOOST_PP_REPEAT(BOOST_CONVERSION_TT_IS_CONSTRUCTIBLE_ARITY_MAX, M0, ~)
 #undef M0
 
- }
+ } // is_constructible
+ } // detail
+ } // type_traits
 
 
 // defines is_constructible, depending on whether T is void, abstract, function or any of the parameters is void
 #define M1(z,n,t) || is_void<A##n>::value
 
 #define M0(z,n,t) \
- template <class T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, class A)> \
+ template <typename T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename A)> \
   struct is_constructible<T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, A)> \
- : public type_traits_detail_is_constructible::void_check##n<is_void<T>::value \
+ : public type_traits::detail::is_constructible::void_check##n<is_void<T>::value \
               || is_abstract<T>::value || is_function<T>::value \
               BOOST_PP_REPEAT(n, M1, ~), \
               T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, A)> \
@@ -489,16 +481,18 @@
 BOOST_PP_REPEAT(BOOST_CONVERSION_TT_IS_CONSTRUCTIBLE_ARITY_MAX, M0, ~)
 #undef M0
 
- namespace type_traits_detail_is_constructible {
- // specialization for bounded arrays without arguments: depends on the type
- template <class A, std::size_t N>
+ namespace type_traits {
+ namespace detail {
+ namespace is_constructible {
+// specialization for bounded arrays without arguments: depends on the type
+ template <typename A, std::size_t N>
     struct imp0<false, A[N]>
         : public boost::is_constructible<typename remove_all_extents<A>::type>
         {};
 
     // specialization for bounded arrays with arguments: always false
 #define M0(z,n,t) \
- template <class A, std::size_t N, BOOST_PP_ENUM_PARAMS(n, class A)> \
+ template <typename A, std::size_t N, BOOST_PP_ENUM_PARAMS(n, typename A)> \
   struct imp##n<false, A[N], BOOST_PP_ENUM_PARAMS(n, A)> \
     : public false_type \
       {};
@@ -507,8 +501,10 @@
 #undef M0
 
 
- }
-}
+ } // is_constructible
+ } // detail
+ } // type_traits
+} // boost
 
 #endif // variadic
 #endif // doc

Modified: sandbox/conversion/boost/conversion/type_traits/is_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_convertible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_convertible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -33,39 +33,39 @@
   template < >
   struct is_convertible< void, const void> : true_type {};
 
- template < class Target, class Source, std::size_t N>
+ template < typename Target, typename Source, std::size_t N>
   struct is_convertible< Target[N], Source[N] >: false_type {};
- template < class Target, class Source, std::size_t N>
+ template < typename Target, typename Source, std::size_t N>
   struct is_convertible< const Target[N], const Source[N] >: false_type {};
 
 
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_convertible< std::pair<A1,A2>, std::pair<B1,B2> >
       : integral_constant<bool, is_convertible<A1,B1>::value && is_convertible<A2,B2>::value >
         {};
 
 #if 0
- template <class T1, class T2, std::size_t N>
+ template <typename T1, typename T2, std::size_t N>
   struct is_convertible< boost::array<T1,N>, boost::array<T2,N> >
       : integral_constant<bool, is_convertible<T1,T2>::value >
         {};
 #endif
- template < class Target, class Source>
+ template < typename Target, typename Source>
   struct is_convertible< std::complex<Target>, std::complex<Source> >
       : integral_constant<bool, is_convertible<Target,Source>::value >
         {};
 
- template < class T1, class A1, class T2, class A2>
+ template < typename T1, typename A1, typename T2, typename A2>
   struct is_convertible< std::vector<T1,A1>, std::vector<T2,A2> >
       : integral_constant<bool, is_convertible<T1,T2>::value >
         {};
 
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_convertible< fusion::tuple<A1,A2>, fusion::tuple<B1,B2> >
       : integral_constant<bool, is_convertible<A1,B1>::value && is_convertible<A2,B2>::value >
         {};
 
- template <class A1, class A2, class A3, class B1, class B2, class B3>
+ template <typename A1, typename A2, typename A3, typename B1, typename B2, typename B3>
   struct is_convertible< fusion::tuple<A1,A2,A3>, fusion::tuple<B1,B2,B3> >
       : integral_constant<bool, is_convertible<A1,B1>::value && is_convertible<A2,B2>::value&& is_convertible<A3,B3>::value >
         {};

Modified: sandbox/conversion/boost/conversion/type_traits/is_copy_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_copy_assignable.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_copy_assignable.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -29,7 +29,7 @@
    *
    * @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
    */
- template <class T>
+ template <typename T>
   struct is_copy_assignable : is_assignable<
     T&,
     T const&

Modified: sandbox/conversion/boost/conversion/type_traits/is_copy_constructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_copy_constructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_copy_constructible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -30,7 +30,7 @@
    *
    * @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
    */
- template <class T>
+ template <typename T>
   struct is_copy_constructible : is_constructible<
     T,
     T const&

Modified: sandbox/conversion/boost/conversion/type_traits/is_default_constructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_default_constructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_default_constructible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -30,7 +30,7 @@
    *
    * @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
    */
- template <class T>
+ template <typename T>
   struct is_default_constructible : is_constructible<
     T
> {};

Modified: sandbox/conversion/boost/conversion/type_traits/is_destructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_destructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_destructible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -23,7 +23,7 @@
    * Condition: @c true_type if and only if given:
    *
    * @code
- * template <class U>
+ * template <typename U>
    * struct test {
    * U u;
    * };
@@ -39,7 +39,7 @@
    *
    * @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
    */
- template <class T>
+ template <typename T>
   struct is_destructible
   {};
 
@@ -51,6 +51,9 @@
 
 
 #include <boost/config.hpp>
+#include <boost/conversion/type_traits/detail/any.hpp>
+#include <boost/conversion/type_traits/detail/yes_no_types.hpp>
+#include <boost/conversion/type_traits/detail/dummy_size.hpp>
 #include <boost/type_traits/integral_constant.hpp>
 #include <boost/type_traits/common_type.hpp>
 #include <boost/type_traits/is_scalar.hpp>
@@ -104,30 +107,19 @@
 #endif
 
 namespace boost {
- namespace type_traits_detail_is_destructible {
- struct any {
- template <typename T>
- any(T);
- };
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
-
- template <class U>
+ namespace type_traits {
+ namespace detail {
+ namespace is_destructible {
+ template <typename U>
     struct test
     {
         U u;
     };
- template <class T, bool False = is_void<T>::value || is_abstract<T>::value, bool True = is_scalar<T>::value >
+ template <typename T, bool False = is_void<T>::value || is_abstract<T>::value, bool True = is_scalar<T>::value >
     struct imp;
 #if defined BOOST_CONVERSION_IS_DESTRUCTIBLE_USES_DECLTYPE
 
- template <class T>
+ template <typename T>
     decltype((declval<test<T> >().~test<T>(), true_type()))
     #if defined BOOST_CONVERSION_TT_IS_DESTRUCTIBLE_USES_RVALUE
     selector(T&&);
@@ -138,44 +130,46 @@
     false_type
     selector(any);
 
- template <class T>
+ template <typename T>
     struct imp<T,false,false>
     : public common_type<decltype(selector(declval<T>()))>::type {};
 
 #elif defined BOOST_CONVERSION_IS_DESTRUCTIBLE_USES_SIZEOF
 
- template <class T>
+ template <typename T>
     struct imp<T,false,false>
     {
- template<class X>
- static type_traits_detail_is_destructible::yes_type
- selector(type_traits_detail_is_destructible::dummy<sizeof(declval<test<T> >().~test<T>(),int())>*);
+ template<typename X>
+ static yes_type
+ selector(dummy_size<sizeof(declval<test<T> >().~test<T>(),int())>*);
 
- template<class X>
- static type_traits_detail_is_destructible::no_type
+ template<typename X>
+ static no_type
       selector(...);
 
       static const bool value =
- sizeof(selector<T>(0)) == sizeof(type_traits_detail_is_destructible::yes_type);
+ sizeof(selector<T>(0)) == sizeof(yes_type);
       typedef boost::integral_constant<bool,value> type;
     };
 
 #else
- template <class T>
+ template <typename T>
     struct imp<T,false,false>
     : public false_type {};
 #endif
- template <class T, bool IsScalar>
+ template <typename T, bool IsScalar>
     struct imp<T, true, IsScalar>
         : public false_type {};
- template <class T>
+ template <typename T>
     struct imp<T, false, true>
         : public true_type {};
 
+ }
+ }
   }
- template <class T>
+ template <typename T>
   struct is_destructible
- : public type_traits_detail_is_destructible::imp<T> {};
+ : public type_traits::detail::is_destructible::imp<T> {};
 
   /**
    * @c is_destructible specialization for reference types.

Modified: sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -37,7 +37,7 @@
    * was accepted. The library uses by default the static_cast version. Users can force the is_constructible version by defining
    * @c BOOST_CONVERSION_TT_IS_EXPLICITLY_CONVERTIBLE_USES_IS_CONSTRUCTIBLE.
    */
- template < class Source, class Target>
+ template < typename Source, typename Target>
   struct is_explicitly_convertible
   {};
 
@@ -57,9 +57,9 @@
 
 namespace boost {
 
- template <class Source, class Target>
+ template <typename Source, typename Target>
   struct is_explicitly_convertible : is_constructible<Target, Source> {};
- template <class Target>
+ template <typename Target>
   struct is_explicitly_convertible<void,Target> : false_type {};
 
 
@@ -68,6 +68,9 @@
 #else
 
 #include <boost/config.hpp>
+#include <boost/conversion/type_traits/detail/any.hpp>
+#include <boost/conversion/type_traits/detail/yes_no_types.hpp>
+#include <boost/conversion/type_traits/detail/dummy_size.hpp>
 #include <boost/type_traits/integral_constant.hpp>
 #include <boost/utility/declval.hpp>
 #include <cstddef>
@@ -113,41 +116,25 @@
 
 
 namespace boost {
- namespace type_traits_detail_is_explicitly_convertible {
- //! type used instead of ... to accept any type
- struct any {
- template <typename T>
- any(T);
- };
-
- //! type useful to compare with the sizeof
- typedef char yes_type;
- //! type useful to compare with the sizeof
- struct no_type { char a[2]; };
-
- //! type useful to accept a sizeof as parameter
- template<std::size_t N>
- struct dummy;
- }
-
-
- namespace type_traits_detail_is_explicitly_convertible {
+ namespace type_traits {
+ namespace detail {
+ namespace is_explicitly_convertible {
 #if defined BOOST_CONVERSION_IS_CONSTRUCTIBLE_USES_DECLTYPE
 
     // specific positive test functions
- template <class S, class T>
+ template <typename S, typename T>
   decltype((static_cast<T>(declval<S>()), true_type()))
   test(T&, S);
 
     // specific negative test functions
- template <class S>
+ template <typename S>
   false_type
   test(any, S);
 
 // specialization for NOT void, abstract, function or any of the parameters is void, scalar or reference
 // depends on whether static_cast<T>(declval<S>()) is well formed
 
- template <bool, class S, class T>
+ template <bool, typename S, typename T>
     struct imp
       : public common_type<decltype(test(declval<T&>(), declval<S>()))>::type
     {};
@@ -158,19 +145,19 @@
 // specialization for void, abstract, function or any of the parameters is void, scalar or reference
 // depends on whether static_cast<T>(declval<Args>() ...) is well formed
 
-template<bool, class S, class T>
+template<bool, typename S, typename T>
 struct imp
 {
- template<class X>
- static type_traits_detail_is_explicitly_convertible::yes_type
- test(type_traits_detail_is_explicitly_convertible::dummy<sizeof(static_cast<X>(declval<S>()))>*);
+ template<typename X>
+ static yes_type
+ test(dummy_size<sizeof(static_cast<X>(declval<S>()))>*);
 
- template<class X>
- static type_traits_detail_is_explicitly_convertible::no_type
+ template<typename X>
+ static no_type
     test(...);
 
     static const bool value =
- sizeof(test<T>(0)) == sizeof(type_traits_detail_is_explicitly_convertible::yes_type);
+ sizeof(test<T>(0)) == sizeof(yes_type);
     typedef boost::integral_constant<bool,value> type;
 };
 
@@ -182,7 +169,7 @@
 // allows to detect if static_cast<Target>(declval<Source>()) is well formed
 // always false. The user of the library needs to specialize this trait for its owns types.
 
-template<bool, class S, class T>
+template<bool, typename S, typename T>
 struct imp
   : boost::false_type
 {
@@ -193,7 +180,7 @@
 
 
 // specialization for scalar or reference: depend on the source is convertible to the target
- template <class S, class T>
+ template <typename S, typename T>
       struct imp<true, S, T>
           : public integral_constant<bool,is_convertible<S,T>::value || imp<false,S,T>::value >
           {};
@@ -201,7 +188,7 @@
 // specialization for NOT void, abstract, function or any of the parameters is void:
       // depends on whether the type is scalar or reference
 
- template <bool, class S, class T>
+ template <bool, typename S, typename T>
   struct void_check
     : public imp<is_scalar<T>::value || is_reference<T>::value,
                               S, T>
@@ -209,7 +196,7 @@
 
 
 // specialization for void, abstract, function or any of the parameters is void: always false
- template <class S, class T>
+ template <typename S, typename T>
   struct void_check<true, S, T>
     : public false_type
   {};
@@ -217,18 +204,20 @@
 
 // specialization for unbounded arrays: always false
 
- template <class S, class A>
+ template <typename S, typename A>
   struct imp<false, S, A[]>
     : public false_type
   {};
 
+ }
+ }
   }
 
 
 // defines is_explicitly_convertible, depending on whether T is void, abstract, function or any of the parameters is void
- template <class S, class T>
+ template <typename S, class T>
   struct is_explicitly_convertible
- : public type_traits_detail_is_explicitly_convertible::void_check<is_void<T>::value
+ : public type_traits::detail::is_explicitly_convertible::void_check<is_void<T>::value
               || is_abstract<T>::value || is_function<T>::value
               || is_void<S>::value,
               S, T>

Modified: sandbox/conversion/boost/conversion/type_traits/is_move_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_move_assignable.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_move_assignable.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -15,6 +15,9 @@
 
 #ifndef BOOST_CONVERSION_TT_IS_MOVE_ASSIGNABLE_HPP
 #define BOOST_CONVERSION_TT_IS_MOVE_ASSIGNABLE_HPP
+#include <boost/conversion/type_traits/detail/any.hpp>
+#include <boost/conversion/type_traits/detail/yes_no_types.hpp>
+#include <boost/conversion/type_traits/detail/dummy_size.hpp>
 
 #include <boost/conversion/type_traits/is_assignable.hpp>
 #include <boost/conversion/type_traits/is_copy_assignable.hpp>
@@ -46,7 +49,7 @@
    *
    * @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
    */
- template <class T>
+ template <typename T>
   struct is_move_assignable :
 #if defined BOOST_CONVERSION_TT_IS_MOVE_ASSIGNABLE_USES_RVALUE
     is_assignable<T&, T&&>

Modified: sandbox/conversion/boost/conversion/type_traits/is_move_constructible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_move_constructible.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/is_move_constructible.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -16,6 +16,9 @@
 #ifndef BOOST_CONVERSION_TT_IS_MOVE_CONSTRUCTIBLE_HPP
 #define BOOST_CONVERSION_TT_IS_MOVE_CONSTRUCTIBLE_HPP
 
+#include <boost/conversion/type_traits/detail/any.hpp>
+#include <boost/conversion/type_traits/detail/yes_no_types.hpp>
+#include <boost/conversion/type_traits/detail/dummy_size.hpp>
 #include <boost/conversion/type_traits/is_constructible.hpp>
 #include <boost/conversion/type_traits/is_copy_constructible.hpp>
 #include <boost/type_traits/remove_reference.hpp>
@@ -46,7 +49,7 @@
    *
    * @Requires @c T must be a complete type, (possibly cv-qualified) void, or an array of unknown bound.
    */
- template <class T>
+ template <typename T>
   struct is_move_constructible :
 #if defined BOOST_CONVERSION_TT_IS_MOVE_CONSTRUCTIBLE_USES_RVALUE
     is_constructible<T, typename add_rvalue_reference<T>::type>

Modified: sandbox/conversion/boost/conversion/type_traits/std/complex.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/std/complex.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/std/complex.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -24,27 +24,27 @@
 namespace boost {
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
- template < class T >
+ template < typename T >
   struct is_constructible< std::complex<T> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
- template < class T >
+ template < typename T >
   struct is_constructible< std::complex<T>, std::complex<T> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
- template < class T >
+ template < typename T >
   struct is_assignable< std::complex<T>, std::complex<T> > : true_type {};
- template < class T >
+ template < typename T >
   struct is_assignable< std::complex<T>&, std::complex<T> const& > : true_type {};
 #endif
 
   // These specializations are needed because the std library implementation is not using SFINAE
- template < class Target, class Source>
+ template < typename Target, typename Source>
   struct is_constructible< std::complex<Target>, std::complex<Source> >
     : integral_constant<bool, is_constructible<Target,Source>::value >
       {};
 
- template < class Target, class Source>
+ template < typename Target, typename Source>
   struct is_assignable< std::complex<Target>, std::complex<Source> >
       : integral_constant<bool, is_assignable<Target,Source>::value >
         {};

Modified: sandbox/conversion/boost/conversion/type_traits/std/utility.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/std/utility.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/std/utility.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -26,34 +26,34 @@
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
   //! Specialization for std::pair<T,U> default constructor
- template < class T, class U>
+ template < typename T, typename U>
   struct is_constructible< std::pair<T,U> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
   //! Specialization for std::pair<T,U> default copy constructor
- template < class T, class U>
+ template < typename T, typename U>
   struct is_constructible< std::pair<T,U>, std::pair<T,U> const& > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
   //! Specialization for std::pair<T,U> assignment operator
- template < class T, class U>
+ template < typename T, typename U>
   struct is_assignable< std::pair<T,U>, std::pair<T,U> > : true_type {};
   //! Specialization for std::pair<T,U> assignment operator
- template < class T, class U>
+ template < typename T, typename U>
   struct is_assignable< std::pair<T,U>&, std::pair<T,U> const& > : true_type {};
 #endif
 
   // these specializations are needed because the libraries define the assignment operator without using SFINAE
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_constructible< std::pair<A1,A2>, std::pair<B1,B2> >
     : integral_constant<bool, is_constructible<A1,B1>::value && is_constructible<A2,B2>::value >
       {};
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_explicitly_convertible< std::pair<A1,A2>, std::pair<B1,B2> >
     : integral_constant<bool, is_explicitly_convertible<A1,B1>::value && is_explicitly_convertible<A2,B2>::value >
       {};
 
- template <class A1, class A2, class B1, class B2>
+ template <typename A1, typename A2, typename B1, typename B2>
   struct is_assignable< std::pair<A1,A2>, std::pair<B1,B2> >
       : integral_constant<bool, is_assignable<A1,B1>::value && is_assignable<A2,B2>::value >
         {};

Modified: sandbox/conversion/boost/conversion/type_traits/std/vector.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/std/vector.hpp (original)
+++ sandbox/conversion/boost/conversion/type_traits/std/vector.hpp 2011-08-13 05:31:11 EDT (Sat, 13 Aug 2011)
@@ -23,28 +23,28 @@
 namespace boost {
 
 #if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
- template < class T, class A>
+ template < typename T, typename A>
   struct is_constructible< std::vector<T,A> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
- template < class T, class A>
+ template < typename T, typename A>
   struct is_constructible< std::vector<T,A>, std::vector<T,A> > : true_type {};
 #endif
 #if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
- template < class T, class A>
+ template < typename T, typename A>
   struct is_assignable< std::vector<T,A>&, std::vector<T,A> const& > : true_type {};
- template < class T, class A>
+ template < typename T, typename A>
   struct is_assignable< std::vector<T,A>, std::vector<T,A> > : true_type {};
 #endif
 
   // these specializations are needed because the libraries define the assignment operator without using SFINAE
 
- template < class T1, class A1, class T2, class A2>
+ template < typename T1, typename A1, typename T2, typename A2>
   struct is_constructible< std::vector<T1,A1>, std::vector<T2,A2> >
     : integral_constant<bool, is_constructible<T1,T2>::value >
       {};
 
- template < class T1, class A1, class T2, class A2>
+ template < typename T1, typename A1, typename T2, typename A2>
   struct is_assignable< std::vector<T1,A1>, std::vector<T2,A2> >
       : integral_constant<bool, is_assignable<T1,T2>::value >
         {};


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