$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r73030 - in sandbox/conversion/boost/conversion: . boost std type_traits type_traits/boost type_traits/boost/chrono type_traits/boost/date_time type_traits/boost/date_time/posix_time type_traits/boost/fusion type_traits/boost/numeric type_traits/std
From: vicente.botet_at_[hidden]
Date: 2011-07-12 23:31:47
Author: viboes
Date: 2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
New Revision: 73030
URL: http://svn.boost.org/trac/boost/changeset/73030
Log:
conversion: move type traits specializations to specific files
Added:
   sandbox/conversion/boost/conversion/type_traits/boost/
   sandbox/conversion/boost/conversion/type_traits/boost/array.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/boost/chrono/
   sandbox/conversion/boost/conversion/type_traits/boost/chrono/duration.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/boost/chrono/time_point.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/boost/date_time/
   sandbox/conversion/boost/conversion/type_traits/boost/date_time/posix_time/
   sandbox/conversion/boost/conversion/type_traits/boost/date_time/posix_time/posix_time_types.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/boost/fusion/
   sandbox/conversion/boost/conversion/type_traits/boost/fusion/tuple.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/boost/numeric/
   sandbox/conversion/boost/conversion/type_traits/boost/numeric/interval.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/boost/optional.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/boost/rational.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/std/
   sandbox/conversion/boost/conversion/type_traits/std/complex.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/std/string.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/std/utility.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/type_traits/std/vector.hpp   (contents, props changed)
Text files modified: 
   sandbox/conversion/boost/conversion/boost/array.hpp                                   |    31 ++++++----------                        
   sandbox/conversion/boost/conversion/boost/chrono_duration_to_posix_time_duration.hpp  |     2                                         
   sandbox/conversion/boost/conversion/boost/chrono_time_point_to_posix_time_ptime.hpp   |     1                                         
   sandbox/conversion/boost/conversion/boost/interval.hpp                                |    18 ---------                               
   sandbox/conversion/boost/conversion/boost/optional.hpp                                |    16 --------                                
   sandbox/conversion/boost/conversion/boost/rational.hpp                                |    16 --------                                
   sandbox/conversion/boost/conversion/boost/tuple.hpp                                   |    10 -----                                   
   sandbox/conversion/boost/conversion/extractor.hpp                                     |    71 ++++++++++++++++----------------------- 
   sandbox/conversion/boost/conversion/std/complex.hpp                                   |    16 --------                                
   sandbox/conversion/boost/conversion/std/pair.hpp                                      |    22 -----------                             
   sandbox/conversion/boost/conversion/std/string.hpp                                    |    17 ---------                               
   sandbox/conversion/boost/conversion/std/vector.hpp                                    |    16 --------                                
   sandbox/conversion/boost/conversion/type_traits/is_assignable.hpp                     |    39 ---------------------                   
   sandbox/conversion/boost/conversion/type_traits/is_constructible.hpp                  |    24 -------------                           
   sandbox/conversion/boost/conversion/type_traits/is_explicitly_convertible.hpp         |     3 +                                       
   sandbox/conversion/boost/conversion/type_traits/is_extrinsic_assignable.hpp           |    13 ++++++-                                 
   sandbox/conversion/boost/conversion/type_traits/is_extrinsic_convertible.hpp          |    11 +++++                                   
   sandbox/conversion/boost/conversion/type_traits/is_extrinsic_explicit_convertible.hpp |    11 +++++                                   
   18 files changed, 85 insertions(+), 252 deletions(-)
Modified: sandbox/conversion/boost/conversion/boost/array.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/array.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/array.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -17,7 +17,7 @@
 #ifndef BOOST_CONVERSION_ARRAY_HPP
 #define BOOST_CONVERSION_ARRAY_HPP
 
-#include <boost/array.hpp>
+#include <boost/conversion/type_traits/boost/array.hpp>
 #include <boost/conversion/implicit_convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
 #include <algorithm>
@@ -34,22 +34,7 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_array{};
 #endif
-  
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-  template < class T, std::size_t N>
-  struct is_constructible< array<T,N> >  : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-  template < class T, std::size_t N>
-  struct is_constructible< array<T,N>, array<T,N> > : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-  template < class T, std::size_t N>
-  struct is_assignable< array<T,N>&, array<T,N> const& >  : true_type {};
-  template < class T, std::size_t N>
-  struct is_assignable< array<T,N>, array<T,N> >  : true_type {};
-#endif
-  
+
   namespace conversion {
 
     /**
@@ -59,7 +44,15 @@
      */
     template < typename Target, typename Source, std::size_t N>
     struct converter_cp< array<Target,N>, array<Source,N>
-      BOOST_CONVERSION_REQUIRES((is_extrinsic_assignable<Target, Source>::value))
+#if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
+        , requires(
+        ExtrinsicAssignable<Target,Source>
+        )
+#elif defined(BOOST_CONVERSION_ENABLE_CND)
+        , typename enable_if_c<
+        is_extrinsic_assignable<Target, Source>::value
+        >::type
+#endif
     > : true_type
     {
       //! @Returns the array having as elements the result of the conversion of each one of the source array elements.
@@ -110,7 +103,7 @@
     template < typename Target, typename Source, std::size_t N>
     struct assigner_cp< array<Target,N>, array<Source,N>
 #if defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
-        , requites()
+        , requites(
         ExtrinsicAssignable<Target,Source>
      && Assignable<Target, Source>
         )
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-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -18,7 +18,7 @@
 #ifndef BOOST_CONVERSION_CHRONO_DURATION_TO_POSIX_TIME_DURATION_HPP
 #define BOOST_CONVERSION_CHRONO_DURATION_TO_POSIX_TIME_DURATION_HPP
 
-#include <boost/chrono/chrono.hpp>
+#include <boost/chrono/duration.hpp>
 #include <boost/date_time/posix_time/posix_time_types.hpp>
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
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-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -19,6 +19,7 @@
 #ifndef BOOST_CONVERSION_CHRONO_TIME_POINT_TO_POSIX_TIME_PTIME_HPP
 #define BOOST_CONVERSION_CHRONO_TIME_POINT_TO_POSIX_TIME_PTIME_HPP
 
+#include <boost/chrono/time_point.hpp>
 #include <boost/chrono/chrono.hpp>
 #include <boost/date_time/posix_time/posix_time_types.hpp>
 #include <boost/date_time/posix_time/conversion.hpp>
Modified: sandbox/conversion/boost/conversion/boost/interval.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/interval.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/interval.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -17,7 +17,7 @@
 #ifndef BOOST_CONVERSION_INTERVAL_HPP
 #define BOOST_CONVERSION_INTERVAL_HPP
 
-#include <boost/numeric/interval.hpp>
+#include <boost/conversion/type_traits/boost/numeric/interval.hpp>
 #include <boost/conversion/implicit_convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
 
@@ -27,22 +27,6 @@
     struct trick_numeric_interval{};
   #endif
   
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-  template < class T, class P>
-  struct is_constructible< numeric::interval<T,P> >  : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-  template < class T, class 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>
-  struct is_assignable< numeric::interval<T,P>&, numeric::interval<T,P> const& >  : true_type {};
-  template < class T, class P>
-  struct is_assignable< numeric::interval<T,P>, numeric::interval<T,P> >  : true_type {};
-#endif
-  
-  
   namespace conversion {
 
     //! @brief @c converter specialization for source and target been @c boost::numeric::interval.
Modified: sandbox/conversion/boost/conversion/boost/optional.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/optional.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/optional.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -18,7 +18,7 @@
 #ifndef BOOST_CONVERSION_OPTIONAL_HPP
 #define BOOST_CONVERSION_OPTIONAL_HPP
 
-#include <boost/optional.hpp>
+#include <boost/conversion/type_traits/boost/optional.hpp>
 #include <boost/none.hpp>
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
@@ -33,20 +33,6 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_optional{};
 #endif
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-    template < class T >
-    struct is_constructible< optional<T> >  : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-    template < class T >
-    struct is_constructible< optional<T>, optional<T> > : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-    template < class T >
-    struct is_assignable< optional<T>, optional<T> >  : true_type {};
-    template < class T >
-    struct is_assignable< optional<T>&, optional<T> const& >  : true_type {};
-#endif
   
   namespace conversion {
 
Modified: sandbox/conversion/boost/conversion/boost/rational.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/rational.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/rational.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -18,7 +18,7 @@
 #ifndef BOOST_CONVERSION_PAIR__HPP
 #define BOOST_CONVERSION_PAIR__HPP
 
-#include <boost/rational.hpp>
+#include <boost/conversion/type_traits/boost/rational.hpp>
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
 #include <boost/config.hpp>
@@ -32,20 +32,6 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_rational{};
 #endif
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-  template < class T>
-  struct is_constructible< rational<T> >  : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-  template < class T>
-  struct is_constructible< rational<T>, rational<T> > : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-  template < class T>
-  struct is_assignable< rational<T>, rational<T> >  : true_type {};
-  template < class T>
-  struct is_assignable< rational<T>&, rational<T> const& >  : true_type {};
-#endif
   
   namespace conversion {
 
Modified: sandbox/conversion/boost/conversion/boost/tuple.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/tuple.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/tuple.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -16,7 +16,7 @@
 #ifndef BOOST_CONVERSION_TUPLE_HPP
 #define BOOST_CONVERSION_TUPLE_HPP
 
-#include <boost/fusion/tuple.hpp>
+#include <boost/conversion/type_traits/boost/fusion/tuple.hpp>
 #include <boost/conversion/explicit_convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
 #include <boost/config.hpp>
@@ -26,14 +26,6 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_fusion_tuple{};
 #endif
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE) 
-  template < class T1, class T2, class 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 >
-  struct is_constructible< fusion::tuple<T1,T2,T3>, fusion::tuple<T1,T2,T3> > : true_type {};
-#endif
   
   namespace conversion {
 
Modified: sandbox/conversion/boost/conversion/extractor.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/extractor.hpp	(original)
+++ sandbox/conversion/boost/conversion/extractor.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -19,7 +19,7 @@
 #define BOOST_CONVERSION_EXTRACTOR_HPP
 
 #include <boost/conversion/convert_to.hpp>
-#include <istream>
+#include <sstream>
 
 namespace boost {
   namespace conversion {
@@ -27,21 +27,7 @@
     class extract_t { };
     const extract_t extract={};
 
-    template <typename T>
-    class extractor {
-      T value_;
-
-    public:
-      extractor(std::istream &is) {
-        is >> value_;
-      }
-
-      T value() const {
-        return value_;
-      };
-      //operator T() const {return value();};
-    };
-
+    
     template <typename T>
     class extractor_stream {
       std::stringstream ios_;
@@ -56,38 +42,41 @@
       extractor_stream& operator>> (U u) { return (ios_ >> u, *this); }
 
 
-      extractor<T> operator>> (extract_t const&) {
-        return extractor<T>(ios_);
+      T operator>> (extract_t const&) {
+        T value;
+        ios_ >> value;
+        return value;
       }
 
-
-      //operator T() const {return value();};
-    };
-    template<typename T>
-    struct explicit_converter< T, extractor_stream<T>
-        > : true_type
-    {
-      T operator()(extractor_stream<T> const & from)
-      {
-        //return from.value();
-        return convert_to<T>(const_cast<extractor_stream<T> &>(from)>>extract);
-      }
     };
+    
+    template <typename T>
+    class extract_to { };
 
-    template<typename T>
-    struct explicit_converter< T, extractor<T>
-        > : true_type
-    {
-      T operator()(extractor<T> const & from)
-      {
-        return from.value();
+    class via_stream {
+      std::stringstream ios_;
+      
+    public:
+      
+      template<typename U>
+      via_stream& operator<< (U u) { return (ios_ << u, *this); }
+      
+      template<typename U>
+      via_stream& operator>> (U u) { return (ios_ >> u, *this); }
+      
+      
+      template<typename T>
+      T operator>> (extract_to<T> const&) {
+        T value;
+        ios_ >> value;
+        return value;
       }
+      
     };
+    
+
 
-    template <typename Target>
-    Target extract2(std::istream &is) {
-      return convert_to<Target>(extractor<Target>(is));
-    }
+    
 
   }
 }
Modified: sandbox/conversion/boost/conversion/std/complex.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/complex.hpp	(original)
+++ sandbox/conversion/boost/conversion/std/complex.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -19,7 +19,7 @@
 #ifndef BOOST_CONVERSION_STD_COMPLEX_HPP
 #define BOOST_CONVERSION_STD_COMPLEX_HPP
 
-#include <complex>
+#include <boost/conversion/type_traits/std/complex.hpp>
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
 
@@ -30,20 +30,6 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_complex{};
 #endif
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-  template < class T >
-  struct is_constructible< std::complex<T> >  : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-  template < class T >
-  struct is_constructible< std::complex<T>, std::complex<T> > : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-  template < class T >
-  struct is_assignable< std::complex<T>, std::complex<T> >  : true_type {};
-  template < class T >
-  struct is_assignable< std::complex<T>&, std::complex<T> const& >  : true_type {};
-#endif
   
   namespace conversion {
 
Modified: sandbox/conversion/boost/conversion/std/pair.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/pair.hpp	(original)
+++ sandbox/conversion/boost/conversion/std/pair.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -21,8 +21,7 @@
 #include <boost/conversion/config.hpp>
 #include <boost/conversion/assign_to.hpp>
 #include <boost/conversion/convert_to.hpp>
-#include <utility>
-
+#include <boost/conversion/type_traits/std/utility.hpp>
 
 
 namespace boost {
@@ -30,25 +29,6 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_pair{};
 #endif
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-  //! Specialization for std::pair<T,U> default constructor
-  template < class T, class 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>
-  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>
-  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>
-  struct is_assignable< std::pair<T,U>&, std::pair<T,U> const& >  : true_type {};
-#endif
-  
   
   namespace conversion {
 
Modified: sandbox/conversion/boost/conversion/std/string.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/string.hpp	(original)
+++ sandbox/conversion/boost/conversion/std/string.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -18,7 +18,7 @@
 #ifndef BOOST_CONVERSION_STD_STRING_HPP
 #define BOOST_CONVERSION_STD_STRING_HPP
 
-#include <string>
+#include <boost/conversion/type_traits/std/string.hpp>
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
 #if !defined(BOOST_CONVERSION_USE_CONVERT)
@@ -33,21 +33,6 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_string{};
 #endif
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-  template<typename CharT, typename Traits, typename Alloc>
-  struct is_constructible< std::basic_string<CharT,Traits,Alloc> >  : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-  template<typename CharT, typename Traits, typename Alloc>
-  struct is_constructible< std::basic_string<CharT,Traits,Alloc>, std::basic_string<CharT,Traits,Alloc> const& >  : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
-  template<typename CharT, typename Traits, typename Alloc>
-  struct is_assignable< std::basic_string<CharT,Traits,Alloc>&, std::basic_string<CharT,Traits,Alloc> const& >  : true_type {};
-  template<typename CharT, typename Traits, typename Alloc>
-  struct is_assignable< std::basic_string<CharT,Traits,Alloc>, std::basic_string<CharT,Traits,Alloc>  >  : true_type {};
-#endif
-
 
   namespace conversion {
 
Modified: sandbox/conversion/boost/conversion/std/vector.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/vector.hpp	(original)
+++ sandbox/conversion/boost/conversion/std/vector.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -19,7 +19,7 @@
 #ifndef BOOST_CONVERSION_STD_VECTOR_HPP
 #define BOOST_CONVERSION_STD_VECTOR_HPP
 
-#include <vector>
+#include <boost/conversion/type_traits/std/vector.hpp>
 #include <boost/conversion/convert_to.hpp>
 #include <boost/conversion/assign_to.hpp>
 //#include <boost/conversion/pack.hpp>
@@ -32,20 +32,6 @@
   //! trick to generate the doc. Don't take care of it
   struct trick_vector{};
 #endif
-#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
-  template < class T, class A>
-  struct is_constructible< std::vector<T,A> >  : true_type {};
-#endif
-#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
-  template < class T, class 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>
-  struct is_assignable< std::vector<T,A>&, std::vector<T,A> const& >  : true_type {};
-  template < class T, class A>
-  struct is_assignable< std::vector<T,A>, std::vector<T,A> >  : true_type {};
-#endif
   
   namespace conversion {
 
Added: sandbox/conversion/boost/conversion/type_traits/boost/array.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/boost/array.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,33 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <boost/array.hpp> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_BOOST_ARRAY_HPP
+#define BOOST_CONVERSION_TT_BOOST_ARRAY_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <boost/array.hpp>
+
+namespace boost {
+
+  // These specializations are needed because the std library implementation is not using SFINAE
+
+  template <class T1, class T2, std::size_t N>
+  struct is_assignable< boost::array<T1,N>, boost::array<T2,N> >
+      : integral_constant<bool, is_assignable<T1,T2>::value  >
+        {};
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/boost/chrono/duration.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/boost/chrono/duration.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,43 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <boost/chrono/duration.hpp> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_BOOST_CHRONO_DURATION_HPP
+#define BOOST_CONVERSION_TT_BOOST_CHRONO_DURATION_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <boost/chrono/duration.hpp>
+
+namespace boost {
+
+#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
+
+
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/boost/chrono/time_point.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/boost/chrono/time_point.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,42 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <boost/chrono/time_point.hpp> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_BOOST_CHRONO_DURATION_HPP
+#define BOOST_CONVERSION_TT_BOOST_CHRONO_DURATION_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <boost/chrono/time_point.hpp>
+
+namespace boost {
+
+#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
+
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/boost/date_time/posix_time/posix_time_types.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/boost/date_time/posix_time/posix_time_types.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,48 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <boost/date_time/posix_time/posix_time_types.hpp> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_BOOST_DATE_TIME_POSIX_TIME_HPP
+#define BOOST_CONVERSION_TT_BOOST_DATE_TIME_POSIX_TIME_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <boost/date_time/posix_time/posix_time_types.hpp>
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+  template <> struct is_constructible< posix_time::time_duration >  : true_type {};
+  template <> struct is_constructible< boost::posix_time::ptime >  : 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 {};
+  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< 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 {};
+  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
+
+
+
+
+
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/boost/fusion/tuple.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/boost/fusion/tuple.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,64 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <boost/fusion/tuple.hpp> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_BOOST_TUPLE_HPP
+#define BOOST_CONVERSION_TT_BOOST_TUPLE_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <boost/fusion/tuple.hpp>
+
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+  template < class T1, class T2, class 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 >
+  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>
+  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>
+  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>
+  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>
+  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>
+  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 >
+      {};
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/boost/numeric/interval.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/boost/numeric/interval.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,42 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <boost/array.hpp> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_BOOST_NUMERIC_INTERVAL_HPP
+#define BOOST_CONVERSION_TT_BOOST_NUMERIC_INTERVAL_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <boost/numeric/interval.hpp>
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+  template < class T, class P>
+  struct is_constructible< numeric::interval<T,P> >  : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
+  template < class T, class 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>
+  struct is_assignable< numeric::interval<T,P>&, numeric::interval<T,P> const& >  : true_type {};
+  template < class T, class P>
+  struct is_assignable< numeric::interval<T,P>, numeric::interval<T,P> >  : true_type {};
+#endif
+
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/boost/optional.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/boost/optional.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,42 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <boost/optional.hpp> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_BOOST_OPTIONAL_HPP
+#define BOOST_CONVERSION_TT_BOOST_OPTIONAL_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <boost/optional.hpp>
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+    template < class T >
+    struct is_constructible< optional<T> >  : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
+    template < class T >
+    struct is_constructible< optional<T>, optional<T> > : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
+    template < class T >
+    struct is_assignable< optional<T>, optional<T> >  : true_type {};
+    template < class T >
+    struct is_assignable< optional<T>&, optional<T> const& >  : true_type {};
+#endif
+
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/boost/rational.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/boost/rational.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,42 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <boost/rational.hpp> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_BOOST_ARRAY_HPP
+#define BOOST_CONVERSION_TT_BOOST_ARRAY_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <boost/rational.hpp>
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+  template < class T>
+  struct is_constructible< rational<T> >  : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
+  template < class T>
+  struct is_constructible< rational<T>, rational<T> > : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
+  template < class T>
+  struct is_assignable< rational<T>, rational<T> >  : true_type {};
+  template < class T>
+  struct is_assignable< rational<T>&, rational<T> const& >  : true_type {};
+#endif
+
+}
+
+#endif
+
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-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -17,7 +17,6 @@
 
 #include <boost/conversion/config.hpp>
 #include <utility>
-#include <boost/array.hpp>
 #include <complex>
 #include <string>
 #include <boost/fusion/tuple.hpp>
@@ -233,44 +232,6 @@
 
 #endif
 
-// These specializations are needed because the std library implementation is not using SFINAE
-namespace boost {
-  template <class A1, class A2, class B1, class 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 >
-        {};
-  template <class T1, class T2, std::size_t N>
-  struct is_assignable< boost::array<T1,N>, boost::array<T2,N> >
-      : integral_constant<bool, is_assignable<T1,T2>::value  >
-        {};
-  template < class Target, class Source>
-  struct is_assignable< std::complex<Target>, std::complex<Source> >
-      : integral_constant<bool, is_assignable<Target,Source>::value  >
-        {};
-  template<typename T, typename CharT, typename Traits, typename Alloc>
-  struct is_assignable< std::basic_string<CharT,Traits,Alloc>, T >
-      : false_type
-        {};
-
-  template < class T1, class A1, class T2, class A2>
-  struct is_assignable< std::vector<T1,A1>, std::vector<T2,A2> >
-      : integral_constant<bool, is_assignable<T1,T2>::value  >
-        {};
-  template <class A1, class A2, class B1, class 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>
-    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>
-    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 >
-        {};
-}
 #endif
 
 #endif
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-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -144,31 +144,7 @@
     template <> struct is_constructible< double, double 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>
-    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 Target, class Source>
-    struct is_constructible< std::complex<Target>, std::complex<Source> >
-      : integral_constant<bool, is_constructible<Target,Source>::value  >
-        {};
-
-    template < class T1, class A1, class T2, class A2>
-    struct is_constructible< std::vector<T1,A1>, std::vector<T2,A2> >
-      : integral_constant<bool, is_constructible<T1,T2>::value  >
-        {};
-
-    template <class A1, class A2, class B1, class 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>
-    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 >
-        {};
 }
 
 #else
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-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -25,7 +25,8 @@
    *
    * Condition: @c is_constructible<Target, Source>::value is @c true.
    *
-   */  template <class Source, class Target>
+   */
+  template <class Source, class Target>
   struct is_explicitly_convertible : is_constructible<Target, Source> {};
 
 #if !defined(BOOST_CONVERSION_DOXYGEN_INVOKED)
Modified: sandbox/conversion/boost/conversion/type_traits/is_extrinsic_assignable.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_extrinsic_assignable.hpp	(original)
+++ sandbox/conversion/boost/conversion/type_traits/is_extrinsic_assignable.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -9,7 +9,7 @@
 //////////////////////////////////////////////////////////////////////////////
 /**
  * @file
- * @brief Defines the type trait @c is_explicitly_convertible.
+ * @brief Defines the type trait @c is_extrinsic_assignable.
  */
 
 
@@ -21,7 +21,16 @@
 namespace boost {
 
   /**
-   * trait-type that is @c true_type when @c Target is extrinsic assignable from @c Source.
+   * States if @c Target is extrinsic 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_extrinsic_assignable : conversion::assigner<Target, Source> {};
Modified: sandbox/conversion/boost/conversion/type_traits/is_extrinsic_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_extrinsic_convertible.hpp	(original)
+++ sandbox/conversion/boost/conversion/type_traits/is_extrinsic_convertible.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -23,7 +23,16 @@
 namespace boost {
 
   /**
-   * trait-type that is @c true_type when @c Source is extrinsic implicit convertible to @c Target.
+   * States if @c Source is extrinsic 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_extrinsic_convertible : conversion::converter<
Modified: sandbox/conversion/boost/conversion/type_traits/is_extrinsic_explicit_convertible.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/type_traits/is_extrinsic_explicit_convertible.hpp	(original)
+++ sandbox/conversion/boost/conversion/type_traits/is_extrinsic_explicit_convertible.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -21,7 +21,16 @@
 namespace boost {
 
   /**
-   * trait-type that is @c true_type when @c Source is extrinsic explicit convertible to @c Target.
+   * States if @c Source is extrinsic 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_extrinsic_explicit_convertible : conversion::explicit_converter<Target, Source> {};
Added: sandbox/conversion/boost/conversion/type_traits/std/complex.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/std/complex.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,54 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <complex> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_STD_COMPLEX_HPP
+#define BOOST_CONVERSION_TT_STD_COMPLEX_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <complex>
+
+
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+  template < class T >
+  struct is_constructible< std::complex<T> >  : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
+  template < class T >
+  struct is_constructible< std::complex<T>, std::complex<T> > : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
+  template < class T >
+  struct is_assignable< std::complex<T>, std::complex<T> >  : true_type {};
+  template < class 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>
+  struct is_constructible< std::complex<Target>, std::complex<Source> >
+    : integral_constant<bool, is_constructible<Target,Source>::value  >
+      {};
+
+  template < class Target, class Source>
+  struct is_assignable< std::complex<Target>, std::complex<Source> >
+      : integral_constant<bool, is_assignable<Target,Source>::value  >
+        {};
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/std/string.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/std/string.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,48 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <string> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_STD_STRING_HPP
+#define BOOST_CONVERSION_TT_STD_STRING_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <string>
+
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+  template<typename CharT, typename Traits, typename Alloc>
+  struct is_constructible< std::basic_string<CharT,Traits,Alloc> >  : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
+  template<typename CharT, typename Traits, typename Alloc>
+  struct is_constructible< std::basic_string<CharT,Traits,Alloc>, std::basic_string<CharT,Traits,Alloc> const& >  : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_ASSIGNABLE)
+  template<typename CharT, typename Traits, typename Alloc>
+  struct is_assignable< std::basic_string<CharT,Traits,Alloc>&, std::basic_string<CharT,Traits,Alloc> const& >  : true_type {};
+  template<typename CharT, typename Traits, typename Alloc>
+  struct is_assignable< std::basic_string<CharT,Traits,Alloc>, std::basic_string<CharT,Traits,Alloc>  >  : true_type {};
+#endif
+
+  template<typename T, typename CharT, typename Traits, typename Alloc>
+  struct is_assignable< std::basic_string<CharT,Traits,Alloc>, T >
+      : false_type
+        {};
+
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/std/utility.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/std/utility.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,58 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <utility> classes.
+ */
+
+#ifndef BOOST_CONVERSION_TT_UTILITY_HPP
+#define BOOST_CONVERSION_TT_UTILITY_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <utility>
+
+
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+  //! Specialization for std::pair<T,U> default constructor
+  template < class T, class 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>
+  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>
+  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>
+  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>
+  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>
+  struct is_assignable< std::pair<A1,A2>, std::pair<B1,B2> >
+      : integral_constant<bool, is_assignable<A1,B1>::value && is_assignable<A2,B2>::value >
+        {};
+}
+
+#endif
+
Added: sandbox/conversion/boost/conversion/type_traits/std/vector.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/type_traits/std/vector.hpp	2011-07-12 23:31:44 EDT (Tue, 12 Jul 2011)
@@ -0,0 +1,54 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (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/type_traits for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @file
+ * @brief Type traits specializations for <vector> types.
+ */
+
+#ifndef BOOST_CONVERSION_TT_VECTOR_HPP
+#define BOOST_CONVERSION_TT_VECTOR_HPP
+
+#include <boost/conversion/type_traits/is_assignable.hpp>
+#include <boost/conversion/type_traits/is_constructible.hpp>
+#include <vector>
+
+
+namespace boost {
+
+#if defined(BOOST_CONVERSION_NO_IS_DEFAULT_CONSTRUCTIBLE)
+  template < class T, class A>
+  struct is_constructible< std::vector<T,A> >  : true_type {};
+#endif
+#if defined(BOOST_CONVERSION_NO_IS_CONSTRUCTIBLE)
+  template < class T, class 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>
+  struct is_assignable< std::vector<T,A>&, std::vector<T,A> const& >  : true_type {};
+  template < class T, class 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>
+  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>
+  struct is_assignable< std::vector<T1,A1>, std::vector<T2,A2> >
+      : integral_constant<bool, is_assignable<T1,T2>::value  >
+        {};
+}
+
+#endif
+