Boost logo

Boost-Commit :

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
+


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