$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
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  >
         {};