$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r57065 - in sandbox/conversion: boost boost/conversion boost/conversion/boost boost/conversion/std libs/conversion/test
From: vicente.botet_at_[hidden]
Date: 2009-10-22 09:56:42
Author: viboes
Date: 2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
New Revision: 57065
URL: http://svn.boost.org/trac/boost/changeset/57065
Log:
TBoost.STM: v0.3
 Incopatibility:
    * Changing the order of to and from parameters on assign_to.
    * Now boost/conversion/convert_to.hpp and boost/conversion/assign_to.hpp files are separated.
New Features:
    * Added <boost/conversion.hpp> global file.
    * Added mca() function.
    * Added convert_to_via function.
Test:
    * Added test for the new features 
Added:
   sandbox/conversion/boost/conversion.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/ca_wrapper.hpp   (contents, props changed)
   sandbox/conversion/boost/conversion/convert_to_via.hpp   (contents, props changed)
Text files modified: 
   sandbox/conversion/boost/conversion/boost/array.hpp                                  |     5 +-                                      
   sandbox/conversion/boost/conversion/boost/chrono_duration_to_posix_time_duration.hpp |     5 +-                                      
   sandbox/conversion/boost/conversion/boost/chrono_time_point_to_posix_time_ptime.hpp  |     5 +-                                      
   sandbox/conversion/boost/conversion/boost/interval.hpp                               |     3 +                                       
   sandbox/conversion/boost/conversion/boost/optional.hpp                               |     3 +                                       
   sandbox/conversion/boost/conversion/boost/rational.hpp                               |     3 +                                       
   sandbox/conversion/boost/conversion/boost/tuple.hpp                                  |     5 +-                                      
   sandbox/conversion/boost/conversion/convert_to.hpp                                   |    25 ------------                            
   sandbox/conversion/boost/conversion/std/complex.hpp                                  |     3 +                                       
   sandbox/conversion/boost/conversion/std/pair.hpp                                     |     3 +                                       
   sandbox/conversion/boost/conversion/std/string.hpp                                   |     5 +-                                      
   sandbox/conversion/libs/conversion/test/Jamfile.v2                                   |     2                                         
   sandbox/conversion/libs/conversion/test/array.cpp                                    |     6 +-                                      
   sandbox/conversion/libs/conversion/test/builtins.cpp                                 |    79 +++++++++++++++++++++++++++++++++++++-- 
   sandbox/conversion/libs/conversion/test/chrono_posix_time_duration.cpp               |     4 +-                                      
   sandbox/conversion/libs/conversion/test/chrono_posix_time_time.cpp                   |     4 +-                                      
   sandbox/conversion/libs/conversion/test/complex.cpp                                  |     8 ++--                                    
   sandbox/conversion/libs/conversion/test/extrinsec.cpp                                |     6 ++-                                     
   sandbox/conversion/libs/conversion/test/interval.cpp                                 |     4 +-                                      
   sandbox/conversion/libs/conversion/test/intrinsec.cpp                                |    41 ++++++++++++++++----                    
   sandbox/conversion/libs/conversion/test/optional.cpp                                 |     2                                         
   sandbox/conversion/libs/conversion/test/pair.cpp                                     |    10 ++--                                    
   sandbox/conversion/libs/conversion/test/rational.cpp                                 |     4 +-                                      
   sandbox/conversion/libs/conversion/test/tuple.cpp                                    |    10 ++--                                    
   24 files changed, 163 insertions(+), 82 deletions(-)
Added: sandbox/conversion/boost/conversion.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -0,0 +1,19 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/conversion for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONVERSION__HPP
+#define BOOST_CONVERSION__HPP
+
+#include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
+#include <boost/conversion/convert_to_via.hpp>
+#include <boost/conversion/ca_wrapper.hpp>
+#endif
+
Modified: sandbox/conversion/boost/conversion/boost/array.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/array.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/array.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -13,6 +13,7 @@
 
 #include <boost/array.hpp>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 #include <algorithm>
 
 namespace boost {
@@ -23,13 +24,13 @@
             inline static array<T1,N> apply(array<T2,N> const & from)
             {
                 array<T1,N> to;
-                boost::assign_to(from, to);
+                boost::assign_to(to, from);
                 return to;
             }
         };
         template < typename T1, typename T2, std::size_t N>
         struct assign_to< array<T1,N>, array<T2,N> > {        
-            inline static array<T1,N>& apply(array<T2,N> const & from, array<T1,N>& to)
+            inline static array<T1,N>& apply(array<T1,N>& to, array<T2,N> const & from)
             {
                 std::transform(from.begin(), from.end(), to.begin(), boost::convert_to<T1,T2>);
                 //for (unsigned int i =0; i<N; ++i) {
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	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -14,6 +14,7 @@
 #include <boost/chrono/chrono.hpp>
 #include <boost/date_time/posix_time/posix_time_types.hpp>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 
 namespace boost {
 
@@ -38,7 +39,7 @@
         };
         template < class Rep, class Period>
         struct assign_to<posix_time::time_duration, chrono::duration<Rep, Period> > {        
-            inline static posix_time::time_duration& apply(const chrono::duration<Rep, Period>& from, posix_time::time_duration& to)
+            inline static posix_time::time_duration& apply(posix_time::time_duration& to, const chrono::duration<Rep, Period>& from)
             {
                 to = boost::convert_to<posix_time::time_duration>(from);
                 return to;
@@ -54,7 +55,7 @@
         };
         template < class Rep, class Period>
         struct assign_to<chrono::duration<Rep, Period>, posix_time::time_duration> {
-            inline static chrono::duration<Rep, Period> & apply(const posix_time::time_duration& from, chrono::duration<Rep, Period> & to)
+            inline static chrono::duration<Rep, Period> & apply(chrono::duration<Rep, Period> & to, const posix_time::time_duration& from)
             {
                 to = boost::convert_to<chrono::duration<Rep, Period> >(from);
                 return to;
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	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -16,6 +16,7 @@
 #include <boost/date_time/posix_time/posix_time_types.hpp>
 #include <boost/date_time/posix_time/conversion.hpp>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 
 namespace boost {
 
@@ -41,7 +42,7 @@
         };
         template < class Clock, class Duration>
         struct assign_to<posix_time::ptime, chrono::time_point<Clock, Duration> > {
-            inline static posix_time::ptime& apply(const chrono::time_point<Clock, Duration>& from, posix_time::ptime& to)
+            inline static posix_time::ptime& apply(posix_time::ptime& to, const chrono::time_point<Clock, Duration>& from)
             {
                 to = boost::convert_to<posix_time::ptime>(from);
                 return to;
@@ -61,7 +62,7 @@
         };
         template < class Clock, class Duration>
         struct assign_to<chrono::time_point<Clock, Duration>, posix_time::ptime> {
-            inline static chrono::time_point<Clock, Duration>& apply(const posix_time::ptime& from, chrono::time_point<Clock, Duration>& to)
+            inline static chrono::time_point<Clock, Duration>& apply(chrono::time_point<Clock, Duration>& to, const posix_time::ptime& from)
             {
                 to = boost::convert_to<chrono::time_point<Clock, Duration> >(from);
                 return to;
Modified: sandbox/conversion/boost/conversion/boost/interval.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/interval.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/interval.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -13,6 +13,7 @@
 
 #include <boost/numeric/interval.hpp>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 
 namespace boost {
 
@@ -26,7 +27,7 @@
         };
         template < class T, class PT, class U, class PU>
         struct assign_to< numeric::interval<T,PT>, numeric::interval<U,PU> > {
-            inline static numeric::interval<T,PT>& apply(const numeric::interval<U,PU>& from, numeric::interval<T,PT>& to)
+            inline static numeric::interval<T,PT>& apply(numeric::interval<T,PT>& to, const numeric::interval<U,PU>& from)
             {
                 to.assign(boost::convert_to<T>(from.lower()), boost::convert_to<U>(from.upper()));
                 return to;
Modified: sandbox/conversion/boost/conversion/boost/optional.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/optional.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/optional.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -15,6 +15,7 @@
 #include <boost/optional.hpp>
 #include <boost/none.hpp>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 
 namespace boost {
 
@@ -28,7 +29,7 @@
         };
         template < class Target, class Source>
         struct assign_to< optional<Target>, optional<Source> > {
-            inline static optional<Target>& apply(const optional<Source>& from, optional<Target>& to)
+            inline static optional<Target>& apply(optional<Target>& to, const optional<Source>& from)
             {
                 to = from?boost::convert_to<Target>(from.get()):optional<Target>();
                 return to;
Modified: sandbox/conversion/boost/conversion/boost/rational.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/rational.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/rational.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -13,6 +13,7 @@
 
 #include <boost/rational.hpp>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 
 namespace boost {
 
@@ -26,7 +27,7 @@
         };
         template < class T, class U>
         struct assign_to< rational<T>, rational<U> > {
-            inline static rational<T>& apply(const rational<U>& from, rational<T>& to)
+            inline static rational<T>& apply(rational<T>& to, const rational<U>& from)
             {
                 to.assign(boost::convert_to<T>(from.numerator()), boost::convert_to<T>(from.denominator()));
                 return to;
Modified: sandbox/conversion/boost/conversion/boost/tuple.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/boost/tuple.hpp	(original)
+++ sandbox/conversion/boost/conversion/boost/tuple.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -13,6 +13,7 @@
 
 #include <boost/fusion/tuple.hpp>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 
 namespace boost {
 
@@ -29,7 +30,7 @@
         };
         template < class T1, class T2, class U1, class U2>
         struct assign_to< boost::fusion::tuple<T1,T2>, boost::fusion::tuple<U1,U2> > {
-            inline static boost::fusion::tuple<T1,T2>& apply(boost::fusion::tuple<U1,U2> const & from, boost::fusion::tuple<T1,T2>& to)
+            inline static boost::fusion::tuple<T1,T2>& apply(boost::fusion::tuple<T1,T2>& to, boost::fusion::tuple<U1,U2> const & from)
             {
                 to = boost::convert_to<boost::fusion::tuple<T1,T2> >(from);
                 return to;
@@ -48,7 +49,7 @@
         };
         template < class T1, class T2, class T3, class U1, class U2, class U3>
         struct assign_to< boost::fusion::tuple<T1,T2,T3>, boost::fusion::tuple<U1,U2,U3> > {
-            inline static boost::fusion::tuple<T1,T2,T3> apply(boost::fusion::tuple<U1,U2,U3> const & from, boost::fusion::tuple<T1,T2,T3>& to)
+            inline static boost::fusion::tuple<T1,T2,T3> apply(boost::fusion::tuple<T1,T2,T3>& to, boost::fusion::tuple<U1,U2,U3> const & from)
             {
                 to = boost::convert_to<boost::fusion::tuple<T1,T2> >(from);
                 return to;
Added: sandbox/conversion/boost/conversion/ca_wrapper.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/ca_wrapper.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -0,0 +1,42 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009. 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/synchro for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CA_WRAPPER__HPP
+#define BOOST_CA_WRAPPER__HPP
+
+#include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
+
+namespace boost {
+    
+    template <typename T> 
+    class ca_wrapper {
+        T& ref_;
+    public:
+        ca_wrapper(T& r) : ref_(r) {}
+        template <typename U>
+        operator U() {
+            return convert_to<U>(ref_);
+        }
+        template <typename U>
+        T& operator =(U const& u) {
+            return assign_to(ref_, u);
+        }
+    };
+
+    template <typename T>
+    ca_wrapper<T> mca(T& r) {
+        return ca_wrapper<T>(r);
+    }
+    
+}
+
+#endif
+
Modified: sandbox/conversion/boost/conversion/convert_to.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/convert_to.hpp	(original)
+++ sandbox/conversion/boost/conversion/convert_to.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -26,25 +26,6 @@
         return To(val);
       }
     };
-    template < typename To, typename From >
-    struct assign_to {
-      inline static To& apply(const From& from, To& to)
-      {
-        to = from;
-        return to;
-      }
-    };
-    template < typename To, typename From, std::size_t N  >
-    struct assign_to<To[N],From[N]> {
-      inline static To*& apply(const From(& from)[N], To (&to)[N])
-      {
-        for (std::size_t i = 0; i < N; ++i)
-        {
-          to[i] = boost::convert_to(from[i]);
-        }
-        return to;
-      }
-    };
 #if 0    
     template < typename To, typename From, std::size_t N >
     struct convert_to<To[N],From[N]> {
@@ -66,12 +47,6 @@
     return partial_specialization_workaround::convert_to<To,From>::apply(val);
   }
 
-  template < typename To, typename From >
-  To& assign_to(const From& from, To& to) {
-    return partial_specialization_workaround::assign_to<To,From>::apply(from, to);
-  }
-
-
 }
 
 #endif
Added: sandbox/conversion/boost/conversion/convert_to_via.hpp
==============================================================================
--- (empty file)
+++ sandbox/conversion/boost/conversion/convert_to_via.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -0,0 +1,26 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2009. 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/synchro for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONVERT_TO_VIA__HPP
+#define BOOST_CONVERT_TO_VIA__HPP
+
+#include <boost/conversion/convert_to.hpp>
+
+namespace boost {
+
+    template < typename To, typename Via, typename From >
+    To convert_to_via(const From& val) {
+        convert_to<To>(convert_to<Via>(val)); 
+    }
+
+}
+
+#endif
+
Modified: sandbox/conversion/boost/conversion/std/complex.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/complex.hpp	(original)
+++ sandbox/conversion/boost/conversion/std/complex.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -13,6 +13,7 @@
 
 #include <complex>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 
 namespace boost {
 
@@ -26,7 +27,7 @@
         };
         template < class T, class U>
         struct assign_to< std::complex<T>, std::complex<U> > {
-            inline static std::complex<T>& apply(const std::complex<U>& from, std::complex<T>& to)
+            inline static std::complex<T>& apply(std::complex<T>& to, const std::complex<U>& from)
             {
                 to.real() = boost::convert_to<T>(from.real());
                 to.imag() = boost::convert_to<T>(from.imag());
Modified: sandbox/conversion/boost/conversion/std/pair.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/pair.hpp	(original)
+++ sandbox/conversion/boost/conversion/std/pair.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -14,6 +14,7 @@
 
 #include <utility>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 
 namespace boost {
     namespace partial_specialization_workaround {
@@ -26,7 +27,7 @@
         };
         template < class T1, class T2, class U1, class U2>
         struct assign_to< std::pair<T1,T2>, std::pair<U1,U2> > {
-            inline static std::pair<T1,T2>& apply(const std::pair<U1,U2>& from, std::pair<T1,T2>& to)
+            inline static std::pair<T1,T2>& apply(std::pair<T1,T2>& to, const std::pair<U1,U2>& from)
             {
                 to.first = boost::convert_to<T1>(from.first);
                 to.second = boost::convert_to<T2>(from.second);
Modified: sandbox/conversion/boost/conversion/std/string.hpp
==============================================================================
--- sandbox/conversion/boost/conversion/std/string.hpp	(original)
+++ sandbox/conversion/boost/conversion/std/string.hpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -13,6 +13,7 @@
 
 #include <string>
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/assign_to.hpp>
 #include <boost/convert/convert.hpp>
 
 namespace boost {
@@ -28,7 +29,7 @@
         }
         template<typename T, typename CharT, typename Traits, typename Alloc>
         struct assign_to< std::basic_string<CharT,Traits,Alloc>, T > {
-            inline static std::basic_string<CharT,Traits,Alloc>& apply(const T& from, std::basic_string<CharT,Traits,Alloc>& to)
+            inline static std::basic_string<CharT,Traits,Alloc>& apply(std::basic_string<CharT,Traits,Alloc>& to, const T& from)
             {
                 to = convert<std::basic_string<CharT,Traits,Alloc> >::from(from);
                 return to;
@@ -43,7 +44,7 @@
         };
         template<typename T, typename CharT, typename Traits, typename Alloc>
         struct assign_to< T, std::basic_string<CharT,Traits,Alloc>> {
-            inline static void apply(const std::basic_string<CharT,Traits,Alloc>& from, T& to)
+            inline static void apply(T& to, const std::basic_string<CharT,Traits,Alloc>& from)
             {
                 to = convert<T>::from(from);
                 return to;
Modified: sandbox/conversion/libs/conversion/test/Jamfile.v2
==============================================================================
--- sandbox/conversion/libs/conversion/test/Jamfile.v2	(original)
+++ sandbox/conversion/libs/conversion/test/Jamfile.v2	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -54,6 +54,6 @@
 
 
 test-suite "compile_fail_test"  :
-#    [ compile-fail ../example/IL_BancAccount.cpp : <define>BOOST_SYNCHRO_DO_NOT_COMPILE  : IL_BancAccount_comp_fail ]
+#    [ compile-fail ../example/IL_BancAccount.cpp : : <define>BOOST_SYNCHRO_DO_NOT_COMPILE  : IL_BancAccount_comp_fail ]
     ;
     
Modified: sandbox/conversion/libs/conversion/test/array.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/array.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/array.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -28,7 +28,7 @@
   }
 
   template <>
-  A1& assign_to<A1,B1>(const B1& from, A1& to) {
+  A1& assign_to<A1,B1>(A1& to, const B1& from) {
     return to;
   }
     
@@ -42,7 +42,7 @@
         };
         template < >
         struct assign_to< A2,B2 > {
-            inline static A2& apply(const B2& from, A2& to)
+            inline static A2& apply(A2& to, const B2& from)
             {
                 return to;
             }
@@ -60,7 +60,7 @@
 void explicit_assign_to() {
     boost::array<int,3> bs;
     boost::array<short,3> as;
-    assign_to(bs,as);
+    assign_to(as,bs);
     
     
 }
Modified: sandbox/conversion/libs/conversion/test/builtins.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/builtins.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/builtins.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -9,6 +9,7 @@
 //////////////////////////////////////////////////////////////////////////////
 
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/ca_wrapper.hpp>
 #include <iostream>
 #include <boost/test/unit_test.hpp>
 
@@ -76,7 +77,8 @@
     unsigned int ui(i);
     unsigned long ul(l);
     
-    assign_to(c,c);
+    assign_to(c, 0);
+    assign_to(c, c);
     assign_to(c, s);
     assign_to(c, i);
     assign_to(c, l);
@@ -85,7 +87,8 @@
     assign_to(c, ui);
     assign_to(c, ul);
 
-    assign_to(s,c);
+    assign_to(s, 1);
+    assign_to(s, c);
     assign_to(s, s);
     assign_to(s, i);
     assign_to(s, l);
@@ -94,7 +97,8 @@
     assign_to(s, ui);
     assign_to(s, ul);
 
-    assign_to(i,c);
+    assign_to(i, 2);
+    assign_to(i, c);
     assign_to(i, s);
     assign_to(i, i);
     assign_to(i, l);
@@ -103,7 +107,8 @@
     assign_to(i, ui);
     assign_to(i, ul);
 
-    assign_to(l,c);
+    assign_to(l, 3);
+    assign_to(l, c);
     assign_to(l, s);
     assign_to(l, i);
     assign_to(l, l);
@@ -111,8 +116,71 @@
     assign_to(l, us);
     assign_to(l, ui);
     assign_to(l, ul);
+}
+
+void mca_assign_to_with_builtin_types() {
+    char c=0;
+    short s=1;
+    int i=2;
+    long l=3;
+    unsigned char uc(c);
+    unsigned short us(s);
+    unsigned int ui(i);
+    unsigned long ul(l);
+    
+    mca(c) = c;
+    mca(c) = s;
+    mca(c) = i;
+    mca(c) = l;
+    mca(c) = uc;
+    mca(c) = us;
+    mca(c) = ui;
+    mca(c) = ul;
+
+    mca(s) = c;
+    mca(s) = s;
+    mca(s) = i;
+    mca(s) = l;
+    mca(s) = uc;
+    mca(s) = us;
+    mca(s) = ui;
+    mca(s) = ul;
+
+    mca(i) = c;
+    mca(i) = s;
+    mca(i) = i;
+    mca(i) = l;
+    mca(i) = uc;
+    mca(i) = us;
+    mca(i) = ui;
+    mca(i) = ul;
+
+    mca(l) = c;
+    mca(l) = s;
+    mca(l) = i;
+    mca(l) = l;
+    mca(l) = uc;
+    mca(l) = us;
+    mca(l) = ui;
+    mca(l) = ul;
+        
+}
+
+void assign_to_transitive() {
+    int a=0; int b=0; int c=0;
 
+    //assign_to(a, assign_to(b, assign_to(c,1)));
+    assign_to(a, assign_to(b, c));
+        
+}
     
+void mca_assign_to_transitive() {
+    {
+    int a=0; int b=0; int c=0;
+
+    mca(a) = mca(b) = mca(b) = 1;
+        
+    }
 }
 
 test_suite* init_unit_test_suite(int, char*[])
@@ -120,6 +188,9 @@
   test_suite* test = BOOST_TEST_SUITE("builtins");
   test->add(BOOST_TEST_CASE(&convert_to_with_builtin_types));
   test->add(BOOST_TEST_CASE(&assign_to_with_builtin_types));
+  test->add(BOOST_TEST_CASE(&mca_assign_to_with_builtin_types));
+  test->add(BOOST_TEST_CASE(&assign_to_transitive));
+  test->add(BOOST_TEST_CASE(&mca_assign_to_transitive));
   return test;
 }
 
Modified: sandbox/conversion/libs/conversion/test/chrono_posix_time_duration.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/chrono_posix_time_duration.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/chrono_posix_time_duration.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -28,9 +28,9 @@
 void explicit_assign_to() {
     chrono::seconds a(3);
     posix_time::time_duration b;
-    assign_to(a, b);
+    assign_to(b, a);
     chrono::seconds c;
-    assign_to(b,c);
+    assign_to(c, b);
 }
 
 test_suite* init_unit_test_suite(int, char*[])
Modified: sandbox/conversion/libs/conversion/test/chrono_posix_time_time.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/chrono_posix_time_time.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/chrono_posix_time_time.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -28,9 +28,9 @@
 void explicit_assign_to() {
     chrono::system_clock::time_point a=chrono::system_clock::now();
     posix_time::ptime b;
-    assign_to(a, b);
+    assign_to(b, a);
     chrono::system_clock::time_point c;
-    assign_to(b,c);
+    assign_to(c, b);
 }
 
 test_suite* init_unit_test_suite(int, char*[])
Modified: sandbox/conversion/libs/conversion/test/complex.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/complex.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/complex.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -28,7 +28,7 @@
   }
 
   template <>
-  A1& assign_to<A1,B1>(const B1& from, A1& to) {
+  A1& assign_to<A1,B1>(A1& to, const B1& from) {
     return to;
   }
     
@@ -42,7 +42,7 @@
         };
         template < >
         struct assign_to< A2,B2 > {
-            inline static A2& apply(const B2& from, A2& to)
+            inline static A2& apply(A2& to, const B2& from)
             {
                 return to;
             }
@@ -64,8 +64,8 @@
     B1 b2;
     std::complex<A1> a;
     std::complex<B1> b;
-    assign_to(b,a);
-    assign_to(std::complex<B1>(b1,b2),a);
+    assign_to(a,b);
+    assign_to(a,std::complex<B1>(b1,b2));
 }
 
 test_suite* init_unit_test_suite(int, char*[])
Modified: sandbox/conversion/libs/conversion/test/extrinsec.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/extrinsec.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/extrinsec.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -9,6 +9,7 @@
 //////////////////////////////////////////////////////////////////////////////
 
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/ca_wrapper.hpp>
 #include <iostream>
 #include <boost/test/unit_test.hpp>
 
@@ -25,7 +26,7 @@
   }
 
   template <>
-  A& assign_to<A,B>(const B& from, A& to) {
+  A& assign_to<A,B>(A& to, const B& from) {
     return to;
   }
 
@@ -38,7 +39,8 @@
 void explicit_assign_to() {
     B b;
     A a;
-    assign_to(b,a);
+    assign_to(a, b);
+    mca(a)= b;
     
 }
 test_suite* init_unit_test_suite(int, char*[])
Modified: sandbox/conversion/libs/conversion/test/interval.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/interval.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/interval.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -32,8 +32,8 @@
     B1 b2;
     boost::numeric::interval<A1> a;
     boost::numeric::interval<B1> b;
-    assign_to(b,a);
-    assign_to(boost::numeric::interval<B1>(b1,b2),a);
+    assign_to(a,b);
+    assign_to(a,boost::numeric::interval<B1>(b1,b2));
 }
 
 test_suite* init_unit_test_suite(int, char*[])
Modified: sandbox/conversion/libs/conversion/test/intrinsec.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/intrinsec.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/intrinsec.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -9,6 +9,7 @@
 //////////////////////////////////////////////////////////////////////////////
 
 #include <boost/conversion/convert_to.hpp>
+#include <boost/conversion/ca_wrapper.hpp>
 #include <iostream>
 #include <boost/test/unit_test.hpp>
 
@@ -79,10 +80,15 @@
     {
     A a(0);
     AA aa(0);
-    assign_to(a,aa);
+    assign_to(aa,a);
     }
-    
 }
+void mca_with_assignemet_operator() {
+    A a(0);
+    AA aa(0);
+    mca(aa) =a;  
+}
+
 void assign_to_with_assignemet_operator_and_implicit_constructor() {
     {
     B b;
@@ -91,24 +97,36 @@
     }
     {
     B b;
-    AA a(1);
-    assign_to(b,a);
+    AA aa(1);
+    assign_to(aa,b);
     }
-    
+}    
+void mca_with_assignemet_operator_and_implicit_constructor() {
+    B b;
+    AA aa(1);
+    mca(aa)=b;    
 }
+
 void assign_to_with_assignemet_operator_and_conversion_operator() {
     {
     C c;
-    CC a(1);
-    a=c;
+    CC cc(1);
+    cc=c;
     }
     {
     C c;
     CC cc(1);
-    assign_to(c,cc);
+    assign_to(cc,c);
     }
-    
 }
+
+void mca_with_assignemet_operator_and_conversion_operator() {
+    C c;
+    CC cc(1);
+    mca(cc)=c;
+}
+    
+
 test_suite* init_unit_test_suite(int, char*[])
 {
   test_suite* test = BOOST_TEST_SUITE("intrinsec");
@@ -118,6 +136,11 @@
   test->add(BOOST_TEST_CASE(&assign_to_with_assignemet_operator));
   test->add(BOOST_TEST_CASE(&assign_to_with_assignemet_operator_and_implicit_constructor));
   test->add(BOOST_TEST_CASE(&assign_to_with_assignemet_operator_and_conversion_operator));
+  test->add(BOOST_TEST_CASE(&mca_with_assignemet_operator));
+  test->add(BOOST_TEST_CASE(&mca_with_assignemet_operator_and_implicit_constructor));
+  test->add(BOOST_TEST_CASE(&mca_with_assignemet_operator_and_conversion_operator));
+    
   return test;
+    
 }
 
Modified: sandbox/conversion/libs/conversion/test/optional.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/optional.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/optional.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -33,7 +33,7 @@
     boost::optional<A1> a;
     boost::optional<B1> b;
     //assign_to(b,a);
-    assign_to(boost::optional<B1>(b1),a);
+    assign_to(a, boost::optional<B1>(b1));
 }
 
 test_suite* init_unit_test_suite(int, char*[])
Modified: sandbox/conversion/libs/conversion/test/pair.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/pair.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/pair.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -28,7 +28,7 @@
   }
 
   template <>
-  A1& assign_to<A1,B1>(const B1& from, A1& to) {
+  A1& assign_to<A1,B1>(A1& to, const B1& from) {
     return to;
   }
     
@@ -42,7 +42,7 @@
         };
         template < >
         struct assign_to< A2,B2 > {
-            inline static A2& apply(const B2& from, A2& to)
+            inline static A2& apply(A2& to, const B2& from)
             {
                 return to;
             }
@@ -65,9 +65,9 @@
     B2 b2;
     std::pair<A1,A2> a;
     std::pair<B1,B2> b;
-    assign_to(b,a);
-    assign_to(std::pair<B1,B2>(b1,b2),a);
-    assign_to(std::make_pair(b1,b2),a);
+    assign_to(a,b);
+    assign_to(a, std::pair<B1,B2>(b1,b2));
+    assign_to(a, std::make_pair(b1,b2));
     
 }
 
Modified: sandbox/conversion/libs/conversion/test/rational.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/rational.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/rational.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -32,8 +32,8 @@
     B1 b2(2);
     boost::rational<A1> a;
     boost::rational<B1> b(1,2);
-    assign_to(b,a);
-    assign_to(boost::rational<B1>(b1,b2),a);
+    assign_to(a, b);
+    assign_to(a, boost::rational<B1>(b1,b2));
 }
 
 test_suite* init_unit_test_suite(int, char*[])
Modified: sandbox/conversion/libs/conversion/test/tuple.cpp
==============================================================================
--- sandbox/conversion/libs/conversion/test/tuple.cpp	(original)
+++ sandbox/conversion/libs/conversion/test/tuple.cpp	2009-10-22 09:56:38 EDT (Thu, 22 Oct 2009)
@@ -28,7 +28,7 @@
   }
 
   template <>
-  A1& assign_to<A1,B1>(const B1& from, A1& to) {
+  A1& assign_to<A1,B1>(A1& to, const B1& from) {
     return to;
   }
     
@@ -42,7 +42,7 @@
         };
         template < >
         struct assign_to< A2,B2 > {
-            inline static A2& apply(const B2& from, A2& to)
+            inline static A2& apply(A2& to, const B2& from)
             {
                 return to;
             }
@@ -65,9 +65,9 @@
     B2 b2;
     boost::fusion::tuple<A1,A2> a;
     boost::fusion::tuple<B1,B2> b;
-    assign_to(b,a);
-    assign_to(boost::fusion::tuple<B1,B2>(b1,b2),a);
-    assign_to(boost::fusion::make_tuple(b1,b2),a);
+    assign_to(a, b);
+    assign_to(a, boost::fusion::tuple<B1,B2>(b1,b2));
+    assign_to(a, boost::fusion::make_tuple(b1,b2));
     
 }