$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r70239 - in sandbox/assign_v2: boost/assign/v2/ref/aux_/list boost/assign/v2/ref/aux_/list/holder boost/assign/v2/ref/aux_/list_tuple boost/assign/v2/ref/aux_/list_tuple/cpp03 boost/assign/v2/ref/aux_/list_tuple/cpp0x boost/assign/v2/ref/aux_/tuple/cpp0x boost/assign/v2/utility boost/assign/v2/value/pipe libs/assign/v2 libs/assign/v2/src libs/assign/v2/test/ref libs/assign/v2/test/ref/aux_ libs/assign/v2/test/utility libs/assign/v2/test/value libs/assign/v2/test/value/modifier libs/assign/v2/test/value/pipe libs/assign/v2/test/value/pipe/modifier
From: erwann.rogard_at_[hidden]
Date: 2011-03-20 20:12:06
Author: e_r
Date: 2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
New Revision: 70239
URL: http://svn.boost.org/trac/boost/changeset/70239
Log:
upd assign_v2
Text files modified: 
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list/as_modulo_list.hpp        |     9 ++                                      
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list/container.hpp             |    28 ++++++---                               
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list/holder/tail.hpp           |    15 +++-                                    
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/cpp03/container.hpp |   117 +++++++++++++++++---------------------- 
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/cpp0x/container.hpp |    70 +++++++----------------                 
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/list_tuple.hpp      |    53 +++++++----------                       
   sandbox/assign_v2/boost/assign/v2/ref/aux_/tuple/cpp0x/data.hpp           |     3                                         
   sandbox/assign_v2/boost/assign/v2/utility/csv.hpp                         |     7 ++                                      
   sandbox/assign_v2/boost/assign/v2/value/pipe/arg_list.hpp                 |    20 +++---                                  
   sandbox/assign_v2/boost/assign/v2/value/pipe/args_list.hpp                |     6 +                                       
   sandbox/assign_v2/libs/assign/v2/src/main.cpp                             |    10 ++                                      
   sandbox/assign_v2/libs/assign/v2/test/ref/array.cpp                       |     7 +                                       
   sandbox/assign_v2/libs/assign/v2/test/ref/aux_/list.cpp                   |     5 -                                       
   sandbox/assign_v2/libs/assign/v2/test/ref/csv_array.cpp                   |     6 +                                       
   sandbox/assign_v2/libs/assign/v2/test/utility/chain.cpp                   |     6 +                                       
   sandbox/assign_v2/libs/assign/v2/test/value/fun.cpp                       |     5 +                                       
   sandbox/assign_v2/libs/assign/v2/test/value/modifier/standard.cpp         |     1                                         
   sandbox/assign_v2/libs/assign/v2/test/value/pipe.cpp                      |     9 +-                                      
   sandbox/assign_v2/libs/assign/v2/test/value/pipe/args_list.cpp            |     6 +                                       
   sandbox/assign_v2/libs/assign/v2/test/value/pipe/modifier/iterate.cpp     |     3                                         
   sandbox/assign_v2/libs/assign/v2/test/value/pipe/modifier/standard.cpp    |     8 +-                                      
   sandbox/assign_v2/libs/assign/v2/test/value/pipe/put.cpp                  |    11 ++-                                     
   sandbox/assign_v2/libs/assign/v2/test/value/ptr.cpp                       |    10 +-                                      
   sandbox/assign_v2/libs/assign/v2/test/value/put.cpp                       |     4 +                                       
   sandbox/assign_v2/libs/assign/v2/tutorial.cpp                             |     4 +                                       
   25 files changed, 216 insertions(+), 207 deletions(-)
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list/as_modulo_list.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list/as_modulo_list.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list/as_modulo_list.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -11,6 +11,7 @@
 #define BOOST_ASSIGN_V2_LIST_REF_AS_MODULO_LIST_ER_2010_HPP
 #include <boost/assign/v2/ref/aux_/list/at.hpp>
 #include <boost/assign/v2/ref/aux_/list/fwd.hpp>
+#include <boost/config.hpp>
 #include <boost/mpl/at.hpp>
 #include <boost/mpl/size.hpp>
 #include <boost/typeof/typeof.hpp>
@@ -32,7 +33,13 @@
         {
             static Lhs lhs;
             static P p;
-            typedef BOOST_TYPEOF_TPL( lhs % p ) type;
+
+#ifdef BOOST_MSVC
+			BOOST_TYPEOF_NESTED_TYPEDEF_TPL(nested, lhs % p )
+    		typedef typename nested::type type;
+#else        
+        	typedef BOOST_TYPEOF_TPL( lhs % p ) type;
+#endif
         };
         
         typedef typename result<at_>::type result_;
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list/container.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list/container.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list/container.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -25,13 +25,13 @@
 
     template<typename Tag, typename H, typename T>
     class container :
+        public tail_holder<T>, // (*) see holder/tail.hpp
         public head_holder<H>,
-        public tail_holder<T>,
         public ::boost::mpl::apply2<policy<Tag>, H, T>::type
     {
 
-        typedef head_holder<H> head_holder_;
         typedef tail_holder<T> tail_holder_;
+        typedef head_holder<H> head_holder_;
 
         public:
 
@@ -44,27 +44,37 @@
         };
 
         explicit container(
-            H h,
-            typename boost::call_traits<T>::param_type t
-        )
-            : head_holder_( h ), tail_holder_( t )
+            typename boost::call_traits<T>::param_type t,
+            H h
+        ):
+            tail_( t ) // // tail_holder_( t ) // (*)
+            , head_holder_( h )
         {}
 
         template<typename H1>
         typename result<H1&>::type
         operator()(H1& h)const{
             typedef typename result<H1&>::type result_;
-            return result_( h, *this);
+            return result_( *this, h );
         }
 
         template<typename H1>
         typename result<H1 const&>::type
         operator()(H1 const& h)const{
             typedef typename result<H1 const&>::type result_;
-            return result_( h, *this);
+            return result_( *this, h );
         }
         
-
+        typedef typename tail_holder_::result_of_tail_type result_of_tail_type;
+        
+        // (*)
+        result_of_tail_type
+        tail()const{ return this->tail_; } 
+        
+        private:
+		typename boost::call_traits< // (*)
+        	typename tail_holder_::result_of_tail_type
+        >::value_type tail_;
     };
 
 }// list_aux
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list/holder/tail.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list/holder/tail.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list/holder/tail.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -24,16 +24,19 @@
     template<typename T>
     struct tail_holder
     {
+// (*) MSVC workaround : tail has to be variable, not a base class
+// http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/68d0361c-1813-4689-aaa3-b78f47eaf8ad
+
+        //tail_holder(T const& t) : tail_( t ){}
+        //result_of_tail_type tail()const{ return this->tail_; }
+
         typedef T tail_type;
         typedef ::boost::mpl::int_<T::static_size::value + 1> static_size;
 
-        tail_holder(T const& t) : tail_( t ){}
-
         typedef T const& result_of_tail_type;
-        result_of_tail_type tail()const{ return this->tail_; }
 
-        private:
-        T const& tail_;
+        //private:
+        //T const& tail_;
     };
 
     template<>
@@ -42,6 +45,8 @@
         typedef nil tail_type;
         typedef ::boost::mpl::int_<0> static_size;
         tail_holder(){}
+        
+        typedef tail_type result_of_tail_type;
     };
 
     template<typename T>
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/cpp03/container.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/cpp03/container.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/cpp03/container.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -11,6 +11,7 @@
 #define BOOST_ASSIGN_V2_REF_AUX_LIST_TUPLE_CPP03_CONTAINER_ER_2010_HPP
 #include <boost/assign/v2/detail/config/limit_arity.hpp>
 #include <boost/assign/v2/detail/functor/crtp_unary_and_up.hpp>
+#include <boost/call_traits.hpp>
 #include <boost/config.hpp>
 #include <boost/mpl/aux_/na.hpp>
 #include <boost/mpl/empty_base.hpp>
@@ -33,17 +34,17 @@
     typedef ::boost::tuples::null_type null_type;
     typedef ::boost::mpl::na na_type;
 
-#define params_default(T, U)\
+#define params_default(U, Na)\
     BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(\
         BOOST_ASSIGN_V2_LIMIT_ARITY,\
-        T,\
-        U\
+        U,\
+        Na\
     )\
 /**/
-#define params(T)\
+#define params(U)\
     BOOST_PP_ENUM_PARAMS(\
         BOOST_ASSIGN_V2_LIMIT_ARITY,\
-        T\
+        U\
     )\
 /**/
 
@@ -61,10 +62,10 @@
     template<> struct vec_value<na_type>{ typedef na_type type; };
 
     template<params( typename T )>
-    struct tuple
+    struct head_value
     {
 #define BOOST_ASSIGN_V2_MACRO(z, n, T)\
-    typename list_tuple_aux::tuple_value<\
+    typename tuple_value<\
         BOOST_PP_CAT(T, n)\
     >::type\
 /**/
@@ -88,72 +89,59 @@
     };
 
     template<list_size_type N,
-        typename L, params_default(typename T, na_type)>
+        typename Tail, params_default(typename T, na_type)>
     class container;
 
-    template<list_size_type N, typename L,
-        params_default(typename T, na_type)
-    >
-    struct meta_result
+    template<list_size_type N, typename Tail, 
+    	params_default(typename T, na_type)>
+    struct traits
     {
-
-        typedef list_tuple_aux::container<N, L, params(T)> this_;
-
-        template<params_default(typename U, na_type)>
-        struct apply
-        {
-            typedef container<
-                N + 1,
-                this_,
-                params(U)
-            > type;
+        typedef container<N, Tail, params(T)> cont_;
+        typedef typename head_value<params(T)>::type head_value_;
+        typedef fetch_tuple<N, Tail, head_value_, cont_> fetch_tuple_;
+        struct meta_result{
+        	template<params_default(typename U, na_type)>
+        	struct apply
+        	{
+            	typedef container<N + 1, cont_, params(U)> type;
+        	};
         };
+        typedef ::boost::mpl::unpack_args<meta_result> unpacked_; 
+        typedef functor_aux::crtp_unary_and_up<cont_, unpacked_> crtp_;
 
     };
 
-    template<list_size_type N, typename L,
-        params_default(typename T, na_type)>
-    struct traits
-    {
-        typedef list_tuple_aux::container<N, L, params(T)> C;
-        typedef typename list_tuple_aux::tuple<params(T)>::type tuple_;
-        typedef list_tuple_aux::extraction<N, L, tuple_, C> extraction_;
-        typedef list_tuple_aux::meta_result<N, L, params(T)> meta_result_;
-        typedef functor_aux::crtp_unary_and_up<
-            C,
-            boost::mpl::unpack_args<meta_result_>
-        > crtp_;
-        typedef typename ::boost::mpl::eval_if_c<
-            N == 0,
-            ::boost::mpl::identity< ::boost::mpl::empty_base >,
-            ::boost::mpl::identity< link<L> >
-        >::type link_;
-    };
-
-    template<list_size_type N, typename L, params(typename T)>
+    template<list_size_type N, typename Tail, params(typename T)>
     class container :
-        public list_tuple_aux::traits<N, L, params(T)>::link_,
-        public list_tuple_aux::traits<N, L, params(T)>::crtp_,
-        public list_tuple_aux::traits<N, L, params(T)>::extraction_
+        public traits<N, Tail, params(T)>::crtp_,
+        public traits<N, Tail, params(T)>::fetch_tuple_
     {
-        typedef list_tuple_aux::traits<N, L, params(T)> traits_;
-        typedef typename traits_::link_ link_;
-        typedef typename traits_::meta_result_ meta_result_;
-        typedef typename traits_::tuple_ tuple_;
+    
+        typedef traits<N, Tail, params(T)> traits_;
+        typedef typename traits_::meta_result meta_result_;
+        typedef typename traits_::head_value_ head_value_;
         typedef typename traits_::crtp_ crtp_;
+        typedef typename ::boost::mpl::eval_if_c<
+            N == 0,
+            ::boost::mpl::identity< Tail >,
+            ::boost::mpl::identity< Tail const& >
+        >::type tail_value_;
 
-        tuple_ tuple;
+		tail_value_ t;
+        head_value_ h;
 
         public:
-        tuple_ const& get_tuple()const{ return this->tuple; }
-        link_ const& get_link()const{ return (*this); }
+        typename boost::call_traits<tail_value_>::const_reference 
+        	tail()const{ return this->t; }
+        typename boost::call_traits<head_value_>::const_reference 
+        	head()const{ return this->h; }
 
         typedef list_tuple_aux::list_size_type list_size_type;
         typedef list_tuple_aux::tuple_size_type tuple_size_type;
         BOOST_STATIC_CONSTANT( list_size_type, static_get_size = N );
         BOOST_STATIC_CONSTANT(
             tuple_size_type,
-            static_tuple_size = ::boost::tuples::length<tuple_>::value
+            static_tuple_size = ::boost::tuples::length<head_value_>::value
         );
 
         container()
@@ -161,15 +149,14 @@
             BOOST_STATIC_ASSERT( N == 0 );
         }
 
-    explicit container(const L& l)
-    : link_( l )
-    {
-        BOOST_STATIC_ASSERT( N > 0 );
-
-    }
+    	explicit container(const Tail& t_)
+    	: t( t )
+    	{
+        	BOOST_STATIC_ASSERT( N > 0 );
+    	}
 
 #define BOOST_ASSIGN_V2_MACRO1(T,R)\
-    typename list_tuple_aux::tuple_param<T>::type R\
+    typename tuple_param<T>::type R\
 /**/
 #define BOOST_ASSIGN_V2_MACRO(z, n, T)\
     BOOST_ASSIGN_V2_MACRO1(\
@@ -179,16 +166,16 @@
         = boost::tuples::detail::cnull()\
 /**/
     explicit container(
-        const L& l,
-        BOOST_ASSIGN_V2_MACRO1(T0,_0) // (*)
+        const Tail& t_,
+        BOOST_ASSIGN_V2_MACRO1(T0, _0) // (*)
         BOOST_PP_ENUM_TRAILING(
             BOOST_PP_DEC(BOOST_ASSIGN_V2_LIMIT_ARITY),
             BOOST_ASSIGN_V2_MACRO,
             T
         )
     )
-    : link_( l )
-    , tuple(
+    : t( t_ )
+    , h(
         BOOST_PP_ENUM_PARAMS(BOOST_ASSIGN_V2_LIMIT_ARITY, _)
     )
     {
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/cpp0x/container.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/cpp0x/container.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/cpp0x/container.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -24,27 +24,6 @@
 namespace ref{
 namespace list_tuple_aux{
 
-    template<list_size_type N,
-        typename L, typename...Args> class container;
-
-    template<list_size_type N, typename L, typename...Args>
-    struct meta_result
-    {
-
-        typedef container<N, L, Args...> this_;
-
-        template<typename... Args1>
-        struct apply
-        {
-            typedef container<
-                N + 1,
-                this_,
-                Args1...
-            > type;
-        };
-
-    };
-
     template<typename NewState>
     struct result
     {
@@ -52,28 +31,27 @@
         struct apply : NewState::template result<Args...>{};
     };
 
-    template<list_size_type N, typename L, typename...Args>
-    class container :
-    ::boost::mpl::eval_if_c<
-        N == 0,
-        ::boost::mpl::identity< ::boost::mpl::empty_base >,
-        ::boost::mpl::identity< link<L> >
-    >::type,
-    public list_tuple_aux::extraction<
-        N, L,
-        tuple_aux::data<Args...>,
-        list_tuple_aux::container<N, L, Args...>
-    >
+    template<list_size_type N, typename Tail, typename...Args>
+    class container 
+    	: public fetch_tuple<
+        	N, L,
+        	tuple_aux::data<Args...>,
+        	list_tuple_aux::container<N, Tail, Args...>
+    	>
     {
-        typedef link<L> link_;
-        typedef meta_result<N, L, Args...> meta_result_;
+    	typename ::boost::mpl::eval_if_c<
+        	N == 0,
+        	::boost::mpl::identity< Tail >,
+        	::boost::mpl::identity< Tail const& >
+    	>::type tail_value_;
+        typedef tuple_aux::data<Args...> head_value_;
 
-        typedef tuple_aux::data<Args...> tuple_;
-        tuple_ tuple;
+        tail_value_ t;
+        head_value_ h;
 
         public:
-        tuple_ const& get_tuple()const{ return this->tuple; }
-        link_ const& get_link()const{ return *this; }
+        tail_value_ const& tail()const{ return this->t; }
+        head_value_ const& head()const{ return this->h; }
 
         typedef list_tuple_aux::list_size_type list_size_type;
         typedef list_tuple_aux::tuple_size_type tuple_size_type;
@@ -90,20 +68,18 @@
         }
 
         explicit container(
-            const L& l,
+            const Tail& t_,
             Args&&... args
-        )
-        : link_( l ),
-        tuple(
-            std::forward<Args>( args )...
-        )
-
+        ) : t( t_ ), h( std::forward<Args>( args )... )
         {
             BOOST_STATIC_ASSERT( N > 0 );
         }
 
         template<typename... Args1>
-        struct result : meta_result_::template apply<Args1...>{};
+        struct result
+        {
+            typedef container<N + 1, container, Args1...> type;
+        };
 
         template<typename... Args1>
         typename result<Args1...>::type
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/list_tuple.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/list_tuple.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list_tuple/list_tuple.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -26,18 +26,19 @@
 
     struct root{};
 
-    template<typename T>
-    struct link
-    {
-
-        link(T const& t) : unlink( t ){}
-
-        T const& unlink;
-    };
+// (*) MSVC workaround : tail has to be variable, not a base class
+// http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/68d0361c-1813-4689-aaa3-b78f47eaf8ad
+//    template<typename T>
+//    struct tail_holder
+//    {
+//
+//        tail_holder(T const& t) : tail( t ){}
+//
+//        T const& tail;
+//    };
 
-    template<list_size_type N,
-        typename L, typename T, typename D>
-    class extraction
+    template<list_size_type N, typename H, typename T, typename D>
+    class fetch_tuple
     {
         typedef D const& result_of_derived_;
         result_of_derived_ derived()const
@@ -49,39 +50,31 @@
 
         public:
 
-        template<list_size_type I>
+        template<list_size_type I> 
         struct is_head : ::boost::mpl::bool_< I + 1 == N >{};
-
         template<list_size_type I>
-        struct link_get_result : L::template get_result<I>{};
+        struct tail_result : H::template get_result<I>{};
+		struct head_result{ typedef T const& type; };
 
         template<list_size_type I>
         struct get_result : ::boost::mpl::eval_if<
-            is_head<I>,
-            ::boost::mpl::identity<
-                T const&
-            >,
-            link_get_result<I>
+        	is_head<I>,
+            head_result,
+            tail_result<I>
         >{};
 
         template<list_size_type I>
-        typename boost::lazy_enable_if<
-            is_head<I>,
-            get_result<I>
-        >::type
-        get(boost::mpl::int_<I> index)const
+        typename boost::lazy_enable_if<is_head<I>, get_result<I> >::type
+        get( ::boost::mpl::int_<I> index)const
         {
-            return this->derived().get_tuple();
+            return this->derived().head();
         }
 
         template<list_size_type I>
-        typename boost::lazy_disable_if<
-            is_head<I>,
-            get_result<I>
-        >::type
+        typename boost::lazy_disable_if<is_head<I>, get_result<I> >::type
         get( ::boost::mpl::int_<I> index )const
         {
-            return this->derived().get_link().unlink.get( index );
+            return this->derived().tail().get( index );
         }
 
     };
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/tuple/cpp0x/data.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/tuple/cpp0x/data.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/tuple/cpp0x/data.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -15,8 +15,7 @@
 #include <boost/type_traits/add_reference.hpp>
 #include <boost/type_traits/is_reference.hpp>
 
-// This tuple variant keeps a copy of rvalue reference. Expression templates
-// involving references to tuples otheriwse cause runtime errors in Release mode under OS X.
+// Keeps copy of rvalue (otherwise reference to temporary problem)
 
 namespace boost{
 namespace assign{
Modified: sandbox/assign_v2/boost/assign/v2/utility/csv.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/utility/csv.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/utility/csv.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -11,6 +11,7 @@
 #define BOOST_ASSIGN_V2_UTILITY_CSV_ER_2010_HPP
 #include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #include <boost/assign/v2/detail/pp/ignore.hpp>
+#include <boost/config.hpp>
 #include <boost/typeof/typeof.hpp>
 #include <boost/mpl/apply.hpp>
 #include <boost/mpl/fold.hpp>
@@ -36,7 +37,13 @@
     {
         static F f;
         static T t;
+#ifdef BOOST_MSVC
+		BOOST_TYPEOF_NESTED_TYPEDEF_TPL(nested, f( t ) )
+    	typedef typename nested::type type;
+#else        
         typedef BOOST_TYPEOF_TPL( f( t ) ) type;
+#endif
+
     };
 
     template<typename F>
Modified: sandbox/assign_v2/boost/assign/v2/value/pipe/arg_list.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/value/pipe/arg_list.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/value/pipe/arg_list.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -104,16 +104,6 @@
         struct result{
             typedef value_aux::arg_list<ParList, N, U> type;
         };
-
-        typename result<0>::type
-        operator()()const
-        {
-            typedef typename result<0>::type result_;
-            return result_(
-                *this,
-                ref::csv_array<na_>( _nil )
-            );
-        }
  
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 
@@ -151,6 +141,16 @@
 
 #else
 
+        typename result<0>::type
+        operator()()const
+        {
+            typedef typename result<0>::type result_;
+            return result_(
+                *this,
+                ref::csv_array<na_>( _nil )
+            );
+        }
+
 #define BOOST_ASSIGN_V2_MACRO1(N, U)\
     return result_( \
         this->par_list_cont(), \
Modified: sandbox/assign_v2/boost/assign/v2/value/pipe/args_list.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/value/pipe/args_list.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/value/pipe/args_list.hpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -41,7 +41,11 @@
     typedef ref::list_tuple_aux::na_type na_type;
 #endif
 
-    template<typename ParList = empty_par_list_, typename ArgsList = empty_args_list_, bool enable_pars = ::boost::mpl::size<ArgsList>::value == 0>
+    template<
+    	typename ParList = empty_par_list_, 
+    	typename ArgsList = empty_args_list_, 
+        bool enable_pars = ::boost::mpl::size<ArgsList>::value == 0
+    >
     class args_list;
 
     template<typename ParList, typename ArgsList, bool enable_pars>
Modified: sandbox/assign_v2/libs/assign/v2/src/main.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/src/main.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/src/main.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -3,12 +3,13 @@
 #include <boost/config.hpp>
 #include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #include <boost/format.hpp>
+#include <boost/version.hpp>
 
 // Test
 #include <libs/assign/v2/test/detail.h>
 #include <libs/assign/v2/test/ref.h>
 #include <libs/assign/v2/test/value.h>
-#include <libs/assign/v2/test/utility.h>
+//#include <libs/assign/v2/test/utility.h>
 
 // Tutorial
 #include <libs/assign/v2/tutorial.h>
@@ -23,6 +24,11 @@
 {
 
     // Do not put libs/assign/v2/test/unit_testing in this project
+	{
+		boost::format f( "boost version %1%.%2% %3% " ); 
+		f  % (BOOST_VERSION / 100000 ) % ( (BOOST_VERSION / 100) % 1000) % (BOOST_VERSION % 100 ); 
+		std::cout << f.str() << std::endl;
+	}
     {
         std::string str = "RVALUE_REFERENCE : %1%\n";
         str += "VARIADIC_TEMPLATES : %2%\n";
@@ -55,7 +61,7 @@
         xxx_detail::test();
         xxx_value::test();
         xxx_ref::test();
-        xxx_utility::test();
+//        xxx_utility::test();
     }
     {
         tutorial_assign_v2::run();
Modified: sandbox/assign_v2/libs/assign/v2/test/ref/array.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/ref/array.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/ref/array.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -21,6 +21,9 @@
 namespace xxx_ref{
 namespace xxx_array{
 
+    // MSVC REMINDER : fully qualify boost::begin boost::end - error C2668
+
+
     void test()
     {
         using namespace boost;
@@ -46,7 +49,7 @@
             //]
             {
                 T& a = ( *begin( ar4 ) );
-                T& b = *next( begin( ar4 ), ar4.size() - 1 );
+                T& b = *next(boost::begin( ar4 ), ar4.size() - 1 );
 
                 BOOST_ASSIGN_V2_CHECK( &a == &w );
                 BOOST_ASSIGN_V2_CHECK( &b == &z );
@@ -55,7 +58,7 @@
         {
             //[test_ref_array_write
             typedef int T; T x, y, z; std::vector<T> r( 3 ); r[0] = 72; r[1] = 31; r[2] = 48;
-            boost::copy( r, begin( as2::ref::array( x )( y )( z ) | as2::ref::_get ) );
+            boost::copy( r,boost::begin( as2::ref::array( x )( y )( z ) | as2::ref::_get ) );
 
             BOOST_ASSIGN_V2_CHECK( x == r[0] );
             BOOST_ASSIGN_V2_CHECK( z == r[2] );
Modified: sandbox/assign_v2/libs/assign/v2/test/ref/aux_/list.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/ref/aux_/list.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/ref/aux_/list.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -41,12 +41,7 @@
             typedef add_reference<t0_>::type r0_;
 
 
-/* // TODO possible extension
-#ifndef BOOST_NO_RVALUE_REFERENCES
-            typedef int r1_;
-#else*/
             typedef add_reference<t1_>::type r1_;
-//#endif
             typedef add_reference<t2_>::type r2_;
 
             t0_ a = 0;
Modified: sandbox/assign_v2/libs/assign/v2/test/ref/csv_array.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/ref/csv_array.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/ref/csv_array.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -20,6 +20,8 @@
 namespace xxx_ref{
 namespace xxx_csv_array{
 
+    // MSVC REMINDER : fully qualify boost::begin boost::end - error C2668
+
     void test()
     {
         using namespace boost;
@@ -45,7 +47,7 @@
             }
             {
                 T& a = (*begin( ar ) );
-                T& b = *next( begin( ar ), 2 );
+                T& b = *next(boost::begin( ar ), 2 );
 
                 BOOST_ASSIGN_V2_CHECK( &a == &x );
                 BOOST_ASSIGN_V2_CHECK( &b == &z );
@@ -55,7 +57,7 @@
             //[test_ref_csv_array_write
             typedef int T; T x, y, z;
             std::vector<T> r( 3 ); r[0] = 72; r[1] = 31; r[2] = 48;
-            boost::copy( r, begin( as2::ref::csv_array( x, y, z ) | as2::ref::_get ) );
+            boost::copy( r,boost::begin( as2::ref::csv_array( x, y, z ) | as2::ref::_get ) );
 
             BOOST_ASSIGN_V2_CHECK( x == r[0] );
             BOOST_ASSIGN_V2_CHECK( z == r[2] );
Modified: sandbox/assign_v2/libs/assign/v2/test/utility/chain.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/utility/chain.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/utility/chain.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -26,6 +26,8 @@
 namespace xxx_utility{
 namespace xxx_chain{
 
+    // MSVC REMINDER : fully qualify boost::begin boost::end - error C2668
+
     void test()
     {
         using namespace boost;
@@ -54,7 +56,7 @@
             words[0] = "foo"; words[1] = "bar"; words[2] = "baz";
             words[3] = "qux"; words[4] = "quux"; words[5] = "grault";
             array<word, 3> head; std::list<word> tail( 3 );
-            copy( words, begin( head | as2::_chain( tail ) ) );
+            copy( words,boost::begin( head | as2::_chain( tail ) ) );
 
             BOOST_ASSIGN_V2_CHECK( range::equal( head, as2::csv_deque<word>( "foo", "bar", "baz" ) ) );
             BOOST_ASSIGN_V2_CHECK( range::equal( tail, as2::csv_deque<word>( "qux", "quux", "grault" ) ) );
@@ -68,7 +70,7 @@
             array<int, 5> consecutive5; int six, seven, eight;
             boost::copy(
                 consecutive8,
-                begin( consecutive5 && (/*<< rvalue! >>*/ as2::ref::csv_array( six, seven, eight ) | as2::ref::_get ) )
+               boost::begin( consecutive5 && (/*<< rvalue! >>*/ as2::ref::csv_array( six, seven, eight ) | as2::ref::_get ) )
             );
 
             BOOST_ASSIGN_V2_CHECK( range::equal( consecutive5, as2::csv_deque( 1, 2, 3, 4, 5 ) ) );
Modified: sandbox/assign_v2/libs/assign/v2/test/value/fun.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/fun.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/fun.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -37,14 +37,15 @@
         using namespace boost;
         namespace as2 = assign::v2;
         {
+        	// (*fp) resolves error C2440 using MSVC
             //[test_value_fun_math
             std::vector<double> exponent;
+            typedef double(*fp)(double);
             typedef function<double(double)> f_;
             (
-                as2::put( exponent ) % ( as2::_fun = f_( log10 ) )
+                as2::put( exponent ) % ( as2::_fun = f_( fp(log10) ) )
             )/*<<Equivalent to `as2::put( exponent )( log10( 1000.0 ) )( log10( 10.0 ) )( log10( 10000.0 ) )( log10( 1.0 ) )( log10( 100.0 ) )`>>*/( 1000.0 )( 10.0 )( 10000.0 )( 1.0 )( 100.0 );
 
-
             double eps = numeric::bounds<double>::smallest();
             BOOST_ASSIGN_V2_CHECK( fabs( exponent.front() - 3.0 ) < eps );
             BOOST_ASSIGN_V2_CHECK( fabs( exponent.back() - 2.0 ) < eps );
Modified: sandbox/assign_v2/libs/assign/v2/test/value/modifier/standard.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/modifier/standard.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/modifier/standard.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -58,6 +58,7 @@
             //]
         }
         {
+        	// fully qual boost::begin/end demanded by MSVC - error C2668
             //[test_value_modifier_push_front
             std::deque<double> sqrt2;
             ( as2::put( sqrt2 ) % as2::_push_front )( 1.41421 )( 1.4142 )( 1.414 )( 1.41 );
Modified: sandbox/assign_v2/libs/assign/v2/test/value/pipe.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/pipe.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/pipe.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -11,7 +11,6 @@
 #include <libs/assign/v2/test/value/pipe/fun.h>
 #include <libs/assign/v2/test/value/pipe/modifier.h>
 #include <libs/assign/v2/test/value/pipe/put.h>
-// #include <libs/assign/v2/test/value/pipe/put_range.h>
 #include <libs/assign/v2/test/value/pipe.h>
 
 namespace test_assign_v2{
@@ -20,11 +19,11 @@
 
     void test()
     {
-        xxx_args_list::test();
-        xxx_fun::test();
-        xxx_modifier::test();
+    	// TODO
+        //xxx_args_list::test();
+        //xxx_fun::test();
+        //xxx_modifier::test();
         xxx_put::test();
-        // xxx_put_range::test();
     }
 
 }// xxx_pipe
Modified: sandbox/assign_v2/libs/assign/v2/test/value/pipe/args_list.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/pipe/args_list.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/pipe/args_list.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -47,10 +47,10 @@
         typedef chk::equal_ref r_;
         typedef chk::equal_val v_;
         {
-/* rvalue */
+// rvalue
 #define A -10
 #define B 10
-            /* lvalue */
+            // lvalue
             int a1 = -1, b1 = 0;
             typedef const int cint_;
             cint_ a = 4, b = 5;
@@ -87,6 +87,7 @@
 #undef A
 #undef B
         }
+/*
         {
             // str_literal
             BOOST_AUTO(args_list, as2::_put( "x" ) );
@@ -99,6 +100,7 @@
             #endif
             aux_::check_args_list<0, 0>( args_list, v_(), str_( "x" ) );
         }
+*/
     }
 
 
Modified: sandbox/assign_v2/libs/assign/v2/test/value/pipe/modifier/iterate.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/pipe/modifier/iterate.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/pipe/modifier/iterate.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -31,9 +31,10 @@
         {
         
             //[pipe_iterate
-        	using namespace lambda;
             typedef int T; boost::array<T, 4> powers; powers[0] = 1; powers[1] = 10;
+
             int i = 2; 
+        	using namespace lambda;
             BOOST_ASSIGN_V2_CHECK(
                 boost::range::equal(
                     powers | ( as2::_csv_put % ( as2::_iterate = var( i )++ ) )( 100, 1000 ),
Modified: sandbox/assign_v2/libs/assign/v2/test/value/pipe/modifier/standard.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/pipe/modifier/standard.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/pipe/modifier/standard.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -36,8 +36,10 @@
         // ------------------------------ WARNING ---------------------------- //
         // Don't misconstrue the commands in the tests below as *necessary* to //
         // obtain particular implementation. Most of the time the default is   //
-        // already set at that invoked with operator%                            //
+        // already set at that invoked with operator%                          //
         // ------------------------------------------------------------------- //
+        
+    	// MSVC REMINDER : fully qualify boost::begin boost::end - error C2668
 
         {
             //[test_value_pipe_modifier_push_front
@@ -66,8 +68,8 @@
                 sqrt2 | ( as2::_put % as2::_insert )( 1.414 )( 1.41421 )( 1.41 )( 1.4142 ) 
             ).lower_bound( 1.41 );
         
-            BOOST_ASSIGN_V2_CHECK( lower == begin( sqrt2 ) );
-            BOOST_ASSIGN_V2_CHECK( sqrt2.upper_bound( 1.41421 ) == end( sqrt2 ) );
+            BOOST_ASSIGN_V2_CHECK( lower ==boost::begin( sqrt2 ) );
+            BOOST_ASSIGN_V2_CHECK( sqrt2.upper_bound( 1.41421 ) ==boost::end( sqrt2 ) );
             //]
         }
     }
Modified: sandbox/assign_v2/libs/assign/v2/test/value/pipe/put.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/pipe/put.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/pipe/put.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -32,31 +32,34 @@
         {
             //[test_value_pipe_put_str_literal
             typedef const char* T; typedef std::string str_; std::deque<T> cont;
+
             BOOST_ASSIGN_V2_CHECK( 
                 boost::range::equal(
                     cont | /*<<`"x"`, `"y"` and `"z"` are kept as `const char(&)[2]`>>*/as2::_csv_put( "x", "y", "z" ),
-                    as2::csv_deque( "x", "y", "z" )
+                    as2::csv_deque<str_>( "x", "y", "z" )
                 )
             );
-            BOOST_ASSIGN_V2_CHECK( str_( cont[1] ) == "y" );
-            BOOST_ASSIGN_V2_CHECK( str_( cont[2] ) == "z" );
             //]
         }
+// TODO
+/*
         {
             //[test_value_pipe_put_intervals
             boost::array<int, 2> interval; boost::array<int, 6> all6;
+            
             BOOST_ASSIGN_V2_CHECK(
                 boost::range::equal(
                     all6 | as2::_put( 1 )( 2 )( as2::as_arg_list( interval | as2::_csv_put( 3, 4 ) ) )( 5 )( 6 ),
                     as2::csv_deque( 1, 2, 3, 4, 5, 6 )
                 )
             );
+            
             BOOST_ASSIGN_V2_CHECK(
                 boost::range::equal( interval, as2::csv_deque( 3, 4 ) )
             );
             //]
         }
-
+*/
     }// test()
 
 }// xxx_put
Modified: sandbox/assign_v2/libs/assign/v2/test/value/ptr.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/ptr.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/ptr.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -31,7 +31,7 @@
             //[test_value_ptr_array
             typedef int T;
             T x = 1, y = 2, z = 3; boost::ptr_array<T, 3> cont;
-            as2::put( cont )( x )( y )( z );
+            as2::put( cont )/*<<Calls `assoc[i++] = new T( t )` for `i = 0` and `t`[^ = ] `x`, `y`, and `z`>>*/( x )( y )( z );
             
             BOOST_ASSIGN_V2_CHECK( cont.front() == x );
             BOOST_ASSIGN_V2_CHECK( cont.back() == z );
@@ -40,7 +40,7 @@
         {
             //[test_value_ptr_deque
             typedef int T; T x = 1, y = 2, z = 0; boost::ptr_deque<T> cont;
-            as2::put( cont )( x )( y )( z );
+            as2::put( cont )/*<<Calls `assoc.push_back( new T( t ) )` for `t` [^=] `x`, `y`, and `z`>>*/( x )( y )( z );
 
             BOOST_ASSIGN_V2_CHECK( cont.front() == x );
             BOOST_ASSIGN_V2_CHECK( cont.back() == z );
@@ -49,7 +49,7 @@
         {
             //[test_value_ptr_list
             typedef int T; T x = 1, y = 2, z = 0; boost::ptr_list<T> cont;
-            as2::put( cont )( x )( y )( z );
+            as2::put( cont )/*<<Calls `assoc.push_back( new T( t ) )` for `t` [^=] `x`, `y`, and `z`>>*/( x )( y )( z );
 
             BOOST_ASSIGN_V2_CHECK( cont.front() == x );
             BOOST_ASSIGN_V2_CHECK( cont.back() == z );
@@ -58,7 +58,7 @@
         {
             //[test_value_ptr_vector
             typedef int T; T x = 1, y = 2, z = 0; boost::ptr_vector<T> cont;
-            as2::put( cont )( x )( y )( z );
+            as2::put( cont )/*<<Calls `assoc.push_back( new T( t ) )` for `t` [^=] `x`, `y`, and `z`>>*/( x )( y )( z );
 
             BOOST_ASSIGN_V2_CHECK( cont.front() == x );
             BOOST_ASSIGN_V2_CHECK( cont.back() == z );
@@ -77,7 +77,7 @@
             //[put_ptr_set
             typedef std::string T; boost::ptr_set<T> assoc;
             T x = "isomer", y = "ephemeral", z = "prosaic";
-            as2::put( assoc )( x )( z )( y );
+            as2::put( assoc )/*<<Calls `assoc.insert( new T( t ) )` for `t` [^=] `x`, `y`, and `z`>>*/( x )( z )( y );
             BOOST_ASSIGN_V2_CHECK( assoc.count( x ) == 1 );
             BOOST_ASSIGN_V2_CHECK( assoc.count( z ) == 1 );
             //]
Modified: sandbox/assign_v2/libs/assign/v2/test/value/put.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/value/put.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/value/put.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -36,6 +36,8 @@
 namespace xxx_value{
 namespace xxx_put{
 
+    // MSVC REMINDER : fully qualify boost::begin boost::end - error C2668
+
     void test(){
 
         using namespace boost;
@@ -80,7 +82,7 @@
             variable_size_ b( 4 ); b[0] = 0.61; b[1] = 0.69; b[2] = 0.92; b[3] = 0.55;
             array<variable_size_, 4> ragged;
             as2::put( ragged )
-                /*<<Calls `ragged.push_back( variable_size_( begin( a ), end( a ) ) )`>>*/( begin( a ), end( a ) )
+                /*<<Calls `ragged.push_back( variable_size_( begin( a ), end( a ) ) )`>>*/( boost::begin( a ), boost::end( a ) )
                 /*<<Calls `ragged.push_back( variable_size_( b ) )`>>*/( b )
                 /*<<Calls `ragged.push_back( variable_size_( 1, -99.99 ) )`>>*/( 1, -99.99 )
                 /*<<Calls `ragged.push_back( variable_size_( ) )`>>*/( );
Modified: sandbox/assign_v2/libs/assign/v2/tutorial.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/tutorial.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/tutorial.cpp	2011-03-20 20:11:59 EDT (Sun, 20 Mar 2011)
@@ -27,6 +27,8 @@
 
 namespace tutorial_assign_v2{
 
+    // MSVC REMINDER : fully qualify boost::begin boost::end - error C2668
+
     void run()
     {
         using namespace boost;
@@ -77,7 +79,7 @@
             array<int, 5> consecutive5; int six, seven, eight;
             boost::copy(
                 consecutive8,
-                begin( consecutive5 | _chain( ref::csv_array( six, seven, eight ) | ref::_get ) )
+               boost::begin( consecutive5 | _chain( ref::csv_array( six, seven, eight ) | ref::_get ) )
             );
 
             assert( range::equal( consecutive5, csv_deque(1, 2, 3, 4, 5) ) );