$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r71020 - in sandbox/assign_v2: boost/assign boost/assign/v2/conversion boost/assign/v2/deque boost/assign/v2/deque/cpp03 boost/assign/v2/detail boost/assign/v2/detail/functor boost/assign/v2/detail/traits boost/assign/v2/detail/traits/aux_ boost/assign/v2/interpreter boost/assign/v2/option boost/assign/v2/option/modifier boost/assign/v2/pipe boost/assign/v2/put boost/assign/v2/ref/array boost/assign/v2/ref/aux_ boost/assign/v2/ref/aux_/list boost/assign/v2/ref/aux_/list/array boost/assign/v2/ref/aux_/list/holder libs/assign/v2 libs/assign/v2/src libs/assign/v2/test libs/assign/v2/test/interpreter libs/assign/v2/test/option libs/assign/v2/test/pipe/option libs/assign/v2/test/put libs/assign/v2/test/ref libs/assign/v2/test/ref/aux_
From: erwann.rogard_at_[hidden]
Date: 2011-04-05 21:23:07
Author: e_r
Date: 2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
New Revision: 71020
URL: http://svn.boost.org/trac/boost/changeset/71020
Log:
upd assign_v2
Text files modified: 
   sandbox/assign_v2/boost/assign/v2.hpp                                    |     1                                         
   sandbox/assign_v2/boost/assign/v2/conversion/deduce_tag.hpp              |    58 ++-------                               
   sandbox/assign_v2/boost/assign/v2/deque/cpp03/csv_deque.hpp              |   102 ++++++++++++++-                         
   sandbox/assign_v2/boost/assign/v2/deque/csv_deque.hpp                    |   140 ++++++++++++++++-----                   
   sandbox/assign_v2/boost/assign/v2/detail/functor/crtp_unary_and_up.hpp   |     4                                         
   sandbox/assign_v2/boost/assign/v2/detail/keyword.hpp                     |     3                                         
   sandbox/assign_v2/boost/assign/v2/detail/traits/aux_/value_container.hpp |     1                                         
   sandbox/assign_v2/boost/assign/v2/detail/traits/container.hpp            |     4                                         
   sandbox/assign_v2/boost/assign/v2/detail/traits/switch.hpp               |    78 +++++++++--                             
   sandbox/assign_v2/boost/assign/v2/interpreter/csv.hpp                    |    56 ++++----                                
   sandbox/assign_v2/boost/assign/v2/interpreter/data_generator.hpp         |    38 +++--                                   
   sandbox/assign_v2/boost/assign/v2/interpreter/fwd.hpp                    |     2                                         
   sandbox/assign_v2/boost/assign/v2/interpreter/modifier.hpp               |    47 +------                                 
   sandbox/assign_v2/boost/assign/v2/option/data_generator.hpp              |    93 +++++++-------                          
   sandbox/assign_v2/boost/assign/v2/option/list.hpp                        |    86 +++++++++----                           
   sandbox/assign_v2/boost/assign/v2/option/modifier/framework.hpp          |     2                                         
   sandbox/assign_v2/boost/assign/v2/pipe/csv_put.hpp                       |    14 +-                                      
   sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp                        |   126 +++++++++----------                     
   sandbox/assign_v2/boost/assign/v2/put/delayed_csv_put.hpp                |   251 ++++++++++++++++++--------------------- 
   sandbox/assign_v2/boost/assign/v2/put/put.hpp                            |    39 +++---                                  
   sandbox/assign_v2/boost/assign/v2/ref/array/csv_array.hpp                |    21 +--                                     
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list.hpp                      |     1                                         
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list/array/policy.hpp         |     6                                         
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list/as_modulo_list.hpp       |   100 ---------------                         
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list/container.hpp            |    41 ++++-                                   
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list/fwd.hpp                  |     4                                         
   sandbox/assign_v2/boost/assign/v2/ref/aux_/list/holder/tail.hpp          |    27 ++-                                     
   sandbox/assign_v2/libs/assign/v2/src/main.cpp                            |    12                                         
   sandbox/assign_v2/libs/assign/v2/test/conversion.cpp                     |    11 +                                       
   sandbox/assign_v2/libs/assign/v2/test/deque.cpp                          |    83 ++++++------                            
   sandbox/assign_v2/libs/assign/v2/test/interpreter/modifier.cpp           |     6                                         
   sandbox/assign_v2/libs/assign/v2/test/option.cpp                         |     2                                         
   sandbox/assign_v2/libs/assign/v2/test/option/data.cpp                    |    13 +                                       
   sandbox/assign_v2/libs/assign/v2/test/option/iterate.cpp                 |    21 --                                      
   sandbox/assign_v2/libs/assign/v2/test/option/list.cpp                    |    43 ++++--                                  
   sandbox/assign_v2/libs/assign/v2/test/option/mapped.cpp                  |    34 ++--                                    
   sandbox/assign_v2/libs/assign/v2/test/option/std_modifier.cpp            |     9                                         
   sandbox/assign_v2/libs/assign/v2/test/pipe/option/data.cpp               |     4                                         
   sandbox/assign_v2/libs/assign/v2/test/pipe/option/iterate.cpp            |     3                                         
   sandbox/assign_v2/libs/assign/v2/test/pipe/option/mapped.cpp             |    10                                         
   sandbox/assign_v2/libs/assign/v2/test/put/put.cpp                        |    18 +-                                      
   sandbox/assign_v2/libs/assign/v2/test/ref.cpp                            |     2                                         
   sandbox/assign_v2/libs/assign/v2/test/ref/array.cpp                      |     3                                         
   sandbox/assign_v2/libs/assign/v2/test/ref/aux_/list.cpp                  |    18 +-                                      
   sandbox/assign_v2/libs/assign/v2/tutorial.cpp                            |     7                                         
   45 files changed, 854 insertions(+), 790 deletions(-)
Modified: sandbox/assign_v2/boost/assign/v2.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -12,7 +12,6 @@
 
 #include <boost/assign/v2/chain.hpp>
 #include <boost/assign/v2/conversion.hpp>
-#include <boost/assign/v2/csv.hpp>
 #include <boost/assign/v2/detail.hpp>
 #include <boost/assign/v2/deque.hpp>
 #include <boost/assign/v2/option.hpp>
Modified: sandbox/assign_v2/boost/assign/v2/conversion/deduce_tag.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/conversion/deduce_tag.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/conversion/deduce_tag.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -20,56 +20,26 @@
 namespace assign{
 namespace v2{
 namespace switch_tag{
-    struct deduce_convert{};
+    struct conversion{};
 }// switch_tag
-namespace conversion_aux{
-
-    // This is in replacement of switch_aux::helper since here we need
-    // two arguments.
-
-    template<typename T, typename U>
-    struct default_f : ::boost::mpl::true_{};
-
-    template<typename Tag,
-        template<typename, typename> class F = conversion_aux::default_f>
-    struct helper
-    {
-        typedef Tag tag;
-        template<typename T>  // T must derive from mpl::pair<>
-        struct apply
-            : F<typename T::first, typename T::second>
-        {
-        };
-    };
-
-    template<typename C, typename R>
-    struct use_put : ::boost::mpl::or_<
-        container_aux::is_array<C>,
-        container_aux::has_push_deduced_value<C>
-    >{};
-
-}// conversion_aux
-namespace switch_aux{
-
-    template<>
-    struct case_<switch_tag::deduce_convert, 0> :
-        conversion_aux::helper<
-            v2::convert_tag::put,
-            v2::conversion_aux::use_put
-        >{};
 
-    template<>
-    struct case_<switch_tag::deduce_convert, 1> :
-        conversion_aux::helper<v2::convert_tag::copy>{};
+#define BOOST_ASSIGN_V2_SWITCH_TAG conversion
+BOOST_ASSIGN_V2_SWITCH_CASE(0, container_aux::is_array, convert_tag::put)
+BOOST_ASSIGN_V2_SWITCH_CASE(1, container_aux::has_push_deduced_value, convert_tag::put)
+BOOST_ASSIGN_V2_SWITCH_CASE_DEFAULT(2, convert_tag::copy)
+#undef BOOST_ASSIGN_V2_SWITCH_TAG
 
-}// switch_aux
 namespace conversion_aux{
 
-    template<typename C, typename R>
-    struct deduce_tag : v2::switch_aux::result<
-        v2::switch_tag::deduce_convert,
-        boost::mpl::pair<C, R>
+    template<
+    	typename C		// Container
+        , typename R	// Range
     >
+    struct deduce_tag 
+    	: switch_aux::result<
+        	switch_tag::conversion,
+        	C
+    	>
     {};
 
 }// conversion_aux
Modified: sandbox/assign_v2/boost/assign/v2/deque/cpp03/csv_deque.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/deque/cpp03/csv_deque.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/deque/cpp03/csv_deque.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -11,6 +11,7 @@
 #define BOOST_ASSIGN_V2_DEQUE_CPP03_CSV_DEQUE_ER_2010_HPP
 #include <boost/assign/v2/detail/config/limit_csv_arity.hpp>
 #include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
 #include <boost/preprocessor/repetition.hpp>
 
 namespace boost{
@@ -18,29 +19,106 @@
 namespace v2{
 namespace interpreter_aux{
 
-#define BOOST_ASSIGN_V2_MACRO1(z, i, data) ( BOOST_PP_CAT(_, i) )
-#define BOOST_ASSIGN_V2_MACRO2(z, N, data)\
+// Explicit T
+#define BOOST_ASSIGN_V2_MACRO(z, N, is_const)\
+    template<typename T BOOST_PP_ENUM_TRAILING_PARAMS(N, typename T)>\
+    typename boost::lazy_disable_if<\
+    	is_option_crtp<T0>,\
+        result_of::csv_deque<T>\
+    >::type\
+    csv_deque(BOOST_PP_ENUM_BINARY_PARAMS(\
+    	N, T, BOOST_PP_EXPR_IF(is_const, const)& _\
+    ))\
+    {\
+    	typename result_of::csv_deque<T>::type result;\
+        csv( result BOOST_PP_ENUM_TRAILING_PARAMS(N, _) );\
+		return result;\
+    }\
+    template<\
+    	typename T, typename O\
+        BOOST_PP_ENUM_TRAILING_PARAMS(N, typename T)\
+    >\
+    typename boost::lazy_enable_if<\
+    	is_option_crtp<O>,\
+    	result_of::csv_deque_option<O, T>\
+    >::type\
+    csv_deque(\
+    	O const& options\
+        BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(\
+        	N, T, BOOST_PP_EXPR_IF(is_const, const)& _\
+    ))\
+    {\
+   		typedef typename result_of::csv_deque<T>::type before_op_;\
+		typedef typename result_of::csv_deque_option<O, T>::type result_;\
+        result_ result = before_op_() % options;\
+        csv( result BOOST_PP_ENUM_TRAILING_PARAMS(N, _) );\
+		return result;\
+    }\
+/**/
+
+BOOST_PP_REPEAT_FROM_TO(
+	1,
+    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
+    BOOST_ASSIGN_V2_MACRO,
+    0
+)
+BOOST_PP_REPEAT_FROM_TO(
+	1, 
+    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
+    BOOST_ASSIGN_V2_MACRO,
+    1
+)
+#undef BOOST_ASSIGN_V2_MACRO
+
+// Implicit T
+#define BOOST_ASSIGN_V2_PAR_LIST(z, N, data) data 
+#define BOOST_ASSIGN_V2_MACRO(z, N, is_const)\
     template<typename T>\
-    typename result_of::csv_deque<T>::type\
-    csv_deque( BOOST_PP_ENUM_PARAMS(N, T const & _) )\
+    typename boost::lazy_disable_if<\
+    	is_option_crtp<T>,\
+    	result_of::csv_deque<T>\
+    >::type\
+    csv_deque(\
+    	BOOST_PP_ENUM_PARAMS(N, T BOOST_PP_EXPR_IF(is_const, const) & _)\
+    )\
     {\
-        typedef typename result_of::csv_deque<T>::type result_;\
-        return result_() BOOST_PP_REPEAT(N, BOOST_ASSIGN_V2_MACRO1, ~ );\
+        return csv_deque<T, BOOST_PP_ENUM( N, BOOST_ASSIGN_V2_PAR_LIST, T)>(\
+        	BOOST_PP_ENUM_PARAMS(N, _)\
+        );\
+    }\
+    template<typename O, typename T>\
+    typename boost::lazy_enable_if<\
+    	is_option_crtp<O>,\
+    	result_of::csv_deque_option<O, T>\
+    >::type\
+    csv_deque(\
+    	O const& options,\
+        BOOST_PP_ENUM_PARAMS(N, T BOOST_PP_EXPR_IF(is_const, const) & _)\
+    )\
+    {\
+        return csv_deque<T, O, BOOST_PP_ENUM( N, BOOST_ASSIGN_V2_PAR_LIST, T )>(\
+        	options,\
+            BOOST_PP_ENUM_PARAMS(N, _)\
+        );\
     }\
 /**/
 BOOST_PP_REPEAT_FROM_TO(
     1,
     BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
-    BOOST_ASSIGN_V2_MACRO2,
-    ~
+    BOOST_ASSIGN_V2_MACRO,
+    0
+)
+BOOST_PP_REPEAT_FROM_TO(
+    1,
+    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
+    BOOST_ASSIGN_V2_MACRO,
+    1
 )
-#undef BOOST_ASSIGN_V2_MACRO1
-#undef BOOST_ASSIGN_V2_MACRO2
+#undef BOOST_ASSIGN_V2_PAR_LIST
+#undef BOOST_ASSIGN_V2_MACRO
 
 }// interpreter_aux
-
 using interpreter_aux::csv_deque;
-
 }// v2
 }// assign
 }// boost
Modified: sandbox/assign_v2/boost/assign/v2/deque/csv_deque.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/deque/csv_deque.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/deque/csv_deque.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -12,8 +12,12 @@
 #include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #include <boost/assign/v2/detail/pp/ignore.hpp>
 #include <boost/assign/v2/deque/deque.hpp>
+#include <boost/assign/v2/interpreter/csv.hpp>
+#include <boost/assign/v2/option/list.hpp>
 #include <boost/type_traits/decay.hpp>
 #include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 #include <utility>
 #endif
@@ -21,68 +25,131 @@
 namespace boost{
 namespace assign{
 namespace v2{
+//[syntax_deque_csv_deque
 namespace interpreter_aux{
 
     template<typename T>
-    struct csv_deque_value : boost::decay<
-        typename boost::remove_cv<T>::type
-    >{};
+    struct csv_deque_deduce_value/*<-*/ : boost::decay<
+        typename boost::remove_cv<
+        	typename boost::remove_reference<T>::type
+        >::type
+    >{}/*->*/;
 
 namespace result_of{
 
     template<typename T>
-    struct csv_deque: result_of::deque<
-        typename csv_deque_value<T>::type
-    >{};
-
-}// result_of
-}// interpreter_aux
-//[syntax_deque_csv_deque
+    struct csv_deque/*<-*/
+    	: result_of::deque<
+        	typename csv_deque_deduce_value<T>::type
+    	>
+    {}/*->*/;
 
-    template<typename T>
-    struct csv_deque_value/*<-*/
-        : interpreter_aux::csv_deque_value<T>
+    template<typename Os, typename T>
+    struct csv_deque_option/*<-*/	
+    	: modulo_result<
+        	typename result_of::csv_deque<T>::type,
+            Os
+        >
     {}/*->*/;
 
-namespace result_of{
+}// result_of
 
     template<typename T>
-    struct csv_deque/*<-*/
-        : interpreter_aux::result_of::csv_deque<T>
-    {}/*->*/;
+    typename result_of::csv_deque<T>::type
+    csv_deque()/*<-*/{
+        return typename result_of::csv_deque<T>::type();
+    }/*->*/;
 
-}// result_of
 //<-
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
-namespace interpreter_aux{
-
-    template<typename T, typename R>
-    void csv_deque_impl(R& r){}
+//->
+        
+	// Explicit T
+    
+    template<typename T, typename U, typename... Args>
+    typename boost::lazy_disable_if<
+    	is_option_crtp_cpp0x<U>,
+    	result_of::csv_deque<T>
+    >::type
+    csv_deque(U&& u, Args&& ...  args)/*<-*/
+    {
+        typename result_of::csv_deque<T>::type result;
+		csv( result, std::forward<U>( u ), std::forward<Args>( args )... );
+        return result;
+    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
-    template<typename T, typename R, typename...Args>
-    void csv_deque_impl(R& r, T const& t, Args&&...args)
+    template<typename T, typename O, typename... Args>
+    typename boost::lazy_enable_if<
+    	is_option_crtp<O>,
+    	result_of::csv_deque_option<O, T>
+    >::type
+    csv_deque(O const& options, Args&& ...  args)/*<-*/
     {
-        r( t );
-        csv_deque_impl<T>(r, std::forward<Args>( args )... );
-    }
-//->
+    	typedef typename result_of::csv_deque<T>::type before_op_;
+        typename result_of::csv_deque_option<
+        	O, T
+        >::type result = before_op_() % options;
+		csv( result, std::forward<Args>( args )... );
+        return result;
+    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
+	// Implicit T
+    
     template<typename T, typename... Args>
-    typename result_of::csv_deque<T>::type
-    csv_deque(const T& t, Args const& ...  args)/*<-*/
+    typename boost::lazy_disable_if<
+    	is_option_crtp_cpp0x<T>,
+    	result_of::csv_deque<T>
+    >::type
+    csv_deque(T&& t, Args&& ...  args)/*<-*/
     {
-        typename result_of::csv_deque<T>::type result;
-        csv_deque_impl<T>(result, t, args...);
-        return result;
+    	csv_deque<T>( 
+        	std::forward<T>( t ), 
+            std::forward<Args>( args )... 
+        );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
-//]
-}// interpreter_aux
+    template<typename O, typename T, typename... Args>
+    typename boost::lazy_enable_if
+    	is_option_crtp<O>,
+    	result_of::csv_deque_option<Os, T>
+    >::type
+    csv_deque(O const& options, T&& t, Args&& ...  args)/*<-*/
+    {
+    	csv_deque<T>( 
+        	options, 
+            std::forward<T>( t ), 
+            std::forward<Args>( args )... 
+        );
+    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
-using interpreter_aux::csv_deque;
+//<-
+#endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
+//->
 
+}// interpreter_aux
+//<-
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+//->
+	using interpreter_aux::csv_deque;
+//<-
 #endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
+//->
+
+namespace result_of{
+
+    template<typename T>
+    struct csv_deque/*<-*/
+    	: interpreter_aux::result_of::csv_deque<T>
+    {}/*->*/;
 
+    template<typename Os, typename T>
+    struct csv_deque_option/*<-*/	
+    	: interpreter_aux::result_of::csv_deque_option<Os, T>
+    {}/*->*/;
+
+}// result_of
+
+//]
 }// v2
 }// assign
 }// boost
@@ -91,5 +158,4 @@
 #include <boost/assign/v2/deque/cpp03/csv_deque.hpp>
 #endif
 
-
 #endif // BOOST_ASSIGN_V2_DEQUE_CSV_DEQUE_ER_2010_HPP
Modified: sandbox/assign_v2/boost/assign/v2/detail/functor/crtp_unary_and_up.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/detail/functor/crtp_unary_and_up.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/detail/functor/crtp_unary_and_up.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -84,10 +84,6 @@
     } \
 /**/
 
-// TODO remove
-// return this->derived().template impl<BOOST_ASSIGN_V2_TPL_ARG_LIST(SeqU)>( \
-
-
 #define BOOST_ASSIGN_V2_MACRO2(z, n, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT(\
     BOOST_ASSIGN_V2_MACRO1, \
     BOOST_PP_SEQ_FIRST_N(BOOST_PP_INC(n), BOOST_ASSIGN_V2_SEQ_TPL_BINARY_ARG_LIST)\
Modified: sandbox/assign_v2/boost/assign/v2/detail/keyword.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/detail/keyword.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/detail/keyword.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -22,6 +22,7 @@
     };
     struct element/*<-*/{}/*->*/;
     struct key/*<-*/{}/*->*/;
+    struct map/*<-*/{}/*->*/;
     struct nil/*<-*/{}/*->*/;
     struct use_default/*<-*/{}/*->*/;
     struct value/*<-*/{}/*->*/;
@@ -30,6 +31,7 @@
         typedef keyword_aux::ignore			ignore_;
         typedef keyword_aux::element		element_;
         typedef keyword_aux::key			key_;
+	typedef keyword_aux::map			map_;
         typedef keyword_aux::nil			nil_;
         typedef keyword_aux::use_default	use_default_;
         typedef keyword_aux::value			value_;	
@@ -37,6 +39,7 @@
     const ignore_ _ignore/*<-*/ = ignore_()/*->*/;
     const element_ _element/*<-*/ = element_()/*->*/;
     const key_ _key/*<-*/ = key_()/*->*/;
+    const map_ _map/*<-*/ = map_()/*->*/;
     const nil_ _nil/*<-*/ = nil_()/*->*/;
     const use_default_ _use_default/*<-*/ = use_default_()/*->*/;
     const value_ _value/*<-*/ = value_()/*->*/;
Modified: sandbox/assign_v2/boost/assign/v2/detail/traits/aux_/value_container.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/detail/traits/aux_/value_container.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/detail/traits/aux_/value_container.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -12,6 +12,7 @@
 #include <boost/assign/v2/detail/traits/aux_/fwd_container.hpp>
 #include <boost/config.hpp>
 #include <boost/mpl/bool.hpp>
+#include <boost/multi_array/base.hpp> 
 #include <boost/preprocessor/cat.hpp>
 #include <boost/preprocessor/seq.hpp>
 #include <boost/type_traits/add_const.hpp>
Modified: sandbox/assign_v2/boost/assign/v2/detail/traits/container.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/detail/traits/container.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/detail/traits/container.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -83,6 +83,10 @@
         : through_value_container<value_is_map, C>
     {};
     
+    template<typename C> struct is_multi_array 
+        : through_value_container<value_is_multi_array, C>
+    {};
+
     template<typename C>
     struct is_ptr_container : ::boost::mpl::not_<
         boost::is_same<C, typename to_value_container<C>::type>
Modified: sandbox/assign_v2/boost/assign/v2/detail/traits/switch.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/detail/traits/switch.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/detail/traits/switch.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -23,37 +23,79 @@
 }//switch_tag
 namespace switch_aux{
 
-    // Fully specialize by inheriting from wrap<Tag,F>
-    // To terminate the switch, inherit from wrap<Tag>
-    template<typename SwitchTag, int k> struct case_{};
+    template<typename SwitchTag, int CaseNumber> struct case_
+    {
+    	// Specialize like this:
+        // template<>
+    	// struct case_<SwitchTag, CaseNumber> : helper<Value, Predicate>{};
+    };
 
-    template<typename T>
-    struct default_f : ::boost::mpl::true_{};
+    template<typename Expression>
+    struct always_true_ 
+    	: ::boost::mpl::true_
+    {};
 
-    template<typename Tag, template<typename> class F = switch_aux::default_f>
+    template<typename Value, template<typename> class Predicate = always_true_>
     struct helper
     {
-        typedef Tag tag;
-        template<typename T> struct apply : F<T>
-        {
-            // Is Tag compatible with T? Answer : F<T>::value.
-        };
+        typedef Value value;
+        
+        template<typename Expression> 
+        struct apply 
+        	: Predicate<Expression>
+        {};
+        
     };
 
-    template<typename H> // helper
-    struct extract_tag
+    template<typename Helper>
+    struct extract_value
     {
-        typedef typename H::tag type;
+        typedef typename Helper::value type;
     };
 
-    template<typename SwitchTag, typename T, int k = 0>
+    template<typename SwitchTag, typename Expression, int CaseNumber = 0>
     struct result : ::boost::mpl::eval_if<
-        ::boost::mpl::apply1< switch_aux::case_<SwitchTag, k>, T >,
-        switch_aux::extract_tag< switch_aux::case_<SwitchTag, k> >,
-        switch_aux::result< SwitchTag, T, k + 1>
+        ::boost::mpl::apply1< 
+        	switch_aux::case_<SwitchTag, CaseNumber>, 
+            Expression 
+        >,
+        switch_aux::extract_value< 
+        	switch_aux::case_<SwitchTag, CaseNumber> 
+        >,
+        switch_aux::result< 
+        	SwitchTag, Expression, CaseNumber + 1
+        >
     >{};
 
 }// switch_aux
+
+#define BOOST_ASSIGN_V2_SWITCH_CASE(CaseNumber, BooleanMetaF, Value)\
+namespace switch_aux{\
+    template<>\
+    struct case_<switch_tag::BOOST_ASSIGN_V2_SWITCH_TAG, CaseNumber>\
+        : switch_aux::helper<\
+            Value,\
+            BooleanMetaF\
+        >{};\
+}\
+/**/
+
+#define BOOST_ASSIGN_V2_SWITCH_CASE_DEFAULT(CaseNumber, Value)\
+namespace switch_aux{\
+    template<>\
+    struct case_<switch_tag::BOOST_ASSIGN_V2_SWITCH_TAG, CaseNumber>\
+        : switch_aux::helper<Value>\
+    {};\
+}\
+/**/
+
+// Usage:
+// 	#define BOOST_ASSIGN_V2_SWITCH_TAG unspecified
+// for i = 0,...,n-1
+// 	BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_CASE(i, Fi, Valuei)
+// and
+// 	BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_CASE(n, Valuen)
+
 }// v2
 }// assign
 }// boost
Modified: sandbox/assign_v2/boost/assign/v2/interpreter/csv.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/interpreter/csv.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/interpreter/csv.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -18,7 +18,9 @@
 #include <utility>
 #else
 #include <boost/assign/v2/detail/config/limit_csv_arity.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
 #include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
 #include <boost/preprocessor/repetition.hpp>
 #endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 
@@ -28,66 +30,60 @@
 //[syntax_interpreter_csv
 namespace interpreter_aux{
 
+//<-
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+//->
+
         template<typename C, typename F, typename MTag, typename DTag, typename D>
         void csv( 
             interpreter_crtp<C, F, MTag, DTag, D> const& interpreter
     )/*<-*/
     {
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
-
-//<-
-#if BOOST_ASSIGN_V2_ENABLE_CPP0X
-//->
-
         template<typename C, typename F, typename MTag, typename DTag, typename D>
     void csv( 
             interpreter_crtp<C, F, MTag, DTag, D> const& interpreter, 
             T&& t, Args&&... args 
     )/*<-*/
     {
-        return csv( interpreter( t ), std::forward<Args>( args )... );
+        return csv( 
+        	interpreter( std::forward<T>( t ) ), 
+            std::forward<Args>( args )... 
+        );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
 //]
 #else
-#define BOOST_ASSIGN_V2_MACRO1(z, i, data) BOOST_PP_CAT(T, i) data
-#define BOOST_ASSIGN_V2_MACRO2(z, i, data) ( BOOST_PP_CAT(_, i) )
-#define BOOST_ASSIGN_V2_MACRO3(z, N, data)\
-\
-    template<\
-    	typename C, typename F, typename MTag, typename DTag, typename D\
-        BOOST_PP_ENUM_TRAILING_PARAMS(N, typename T)\
-    >\
-    void csv( \
-    	interpreter_crtp<C, F, MTag, DTag, D> const& interpreter\
-        BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, T, & _)\
-    )\
-    {\
-        interpreter BOOST_PP_REPEAT(N, BOOST_ASSIGN_V2_MACRO2, ~ );\
-    }\
-\
+#define BOOST_ASSIGN_V2_MACRO1(z, i, data) ( BOOST_PP_CAT(_, i) )
+#define BOOST_ASSIGN_V2_MACRO2(z, N, is_const)\
     template<\
             typename C, typename F, typename MTag, typename DTag, typename D\
         BOOST_PP_ENUM_TRAILING_PARAMS(N, typename T)\
     >\
-    void csv( \
+    void csv(\
             interpreter_crtp<C, F, MTag, DTag, D> const& interpreter\
-        BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, T, const & _)\
+		BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(\
+        	N, T, BOOST_PP_EXPR_IF(is_const, const) & _\
+        )\
     )\
     {\
-        interpreter BOOST_PP_REPEAT(N, BOOST_ASSIGN_V2_MACRO2, ~ );\
+	    interpreter BOOST_PP_REPEAT(N, BOOST_ASSIGN_V2_MACRO1, ~ );\
     }\
-\
 /**/
+
 BOOST_PP_REPEAT_FROM_TO(
-    1,
+	1, // otherwise redefintion of csv()
+    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
+    BOOST_ASSIGN_V2_MACRO2,
+    0
+)
+BOOST_PP_REPEAT(
     BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
-    BOOST_ASSIGN_V2_MACRO3,
-    ~
+    BOOST_ASSIGN_V2_MACRO2,
+    1
 )
 #undef BOOST_ASSIGN_V2_MACRO1
 #undef BOOST_ASSIGN_V2_MACRO2
-#undef BOOST_ASSIGN_V2_MACRO3
 #endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 
 }// interpreter_aux
Modified: sandbox/assign_v2/boost/assign/v2/interpreter/data_generator.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/interpreter/data_generator.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/interpreter/data_generator.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -9,35 +9,41 @@
 //////////////////////////////////////////////////////////////////////////////
 #ifndef BOOST_ASSIGN_V2_INTERPRETER_DATA_ER_2010_HPP
 #define BOOST_ASSIGN_V2_INTERPRETER_DATA_ER_2010_HPP
+#include <boost/assign/v2/detail/traits/container.hpp>
+#include <boost/assign/v2/detail/traits/switch.hpp>
 #include <boost/assign/v2/detail/functor/pair.hpp>
 #include <boost/assign/v2/detail/functor/value.hpp>
 #include <boost/assign/v2/interpreter/fwd.hpp>
+#include <boost/assign/v2/option/data_generator.hpp>
     
 namespace boost{
 namespace assign{
 namespace v2{
-//[syntax_interpreter_data
+//[syntax_interpreter_data_generator
+namespace switch_tag{
+    struct data_generator{};
+}// switch_tag
+
+#define BOOST_ASSIGN_V2_SWITCH_TAG data_generator
+BOOST_ASSIGN_V2_SWITCH_CASE(0, container_aux::is_multi_array, element_)
+BOOST_ASSIGN_V2_SWITCH_CASE(1, container_aux::is_map, map_)
+BOOST_ASSIGN_V2_SWITCH_CASE_DEFAULT(2, value_)
+#undef BOOST_ASSIGN_V2_SWITCH_TAG
+
 namespace interpreter_aux{
 
     template<
         typename C 		// Value or pointer-container
-        , typename T
-        , bool is_map
     >
     struct deduce_data_generator/*<-*/
-    {
-        typedef v2::functor_aux::value<T> type; 
-    }/*->*/;
-
-    template<typename C, typename T>
-    struct deduce_data_generator<C, T, true>/*<-*/
-    {
-        typedef v2::functor_aux::pair<
-            T, 
-            typename container_aux::key<C>::type,
-            typename container_aux::mapped<C>::type
-        > type; 
-    }/*->*/;
+    	: data_generator<
+        	C, 
+        	typename switch_aux::result< 
+            	switch_tag::data_generator,
+                C
+            >::type
+        >
+    {}/*->*/;
 
 }// interpreter_aux
 //]
Modified: sandbox/assign_v2/boost/assign/v2/interpreter/fwd.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/interpreter/fwd.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/interpreter/fwd.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -39,8 +39,6 @@
 
     template<
         typename C // Value or pointer-container
-        , typename T = typename v2::container_aux::value<C>::type
-        , bool is_map = v2::container_aux::is_map<C>::value
     >
     struct deduce_data_generator;
 
Modified: sandbox/assign_v2/boost/assign/v2/interpreter/modifier.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/interpreter/modifier.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/interpreter/modifier.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -60,46 +60,15 @@
 /*<-*/
 
 namespace switch_tag{
-    struct deduce_put{};
+    struct modifier_tag{};
 }// switch_tag
 
-#ifdef BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_CASE
-#error
-#else
-#define BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_CASE(Tag, BooleanMetaF, CaseNumber)\
-namespace switch_aux{\
-    template<>\
-    struct case_<switch_tag::deduce_put, CaseNumber> :\
-        switch_aux::helper<\
-            v2::modifier_tag::Tag,\
-            BooleanMetaF\
-        >{};\
-}\
-/**/
-#endif
-
-#ifdef BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_DEFAULT
-#error
-#else
-#define BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_DEFAULT(CaseNumber)\
-namespace switch_aux{\
-    template<>\
-    struct case_<switch_tag::deduce_put, CaseNumber> :\
-        switch_aux::helper<v2::modifier_tag::push_back>\
-    {};\
-}\
-/**/
-#endif
-
-#ifdef BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH
-#warning
-#else
-BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_CASE(insert, container_aux::is_associative, 0)
-BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_CASE(iterate<>, container_aux::is_array, 1)
-BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_CASE(push, container_aux::has_push_deduced_value, 2)
-BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH_DEFAULT(3)
-#define BOOST_ASSIGN_V2_OPTION_MODIFIER_SWITCH
-#endif
+#define BOOST_ASSIGN_V2_SWITCH_TAG modifier_tag
+BOOST_ASSIGN_V2_SWITCH_CASE( 0, container_aux::is_associative, modifier_tag::insert )
+BOOST_ASSIGN_V2_SWITCH_CASE( 1, container_aux::is_array, modifier_tag::iterate<> )
+BOOST_ASSIGN_V2_SWITCH_CASE( 2, container_aux::has_push_deduced_value, 	modifier_tag::push )
+BOOST_ASSIGN_V2_SWITCH_CASE_DEFAULT( 3, modifier_tag::push_back )
+#undef BOOST_ASSIGN_V2_SWITCH_TAG
 
 /*->*/
 namespace interpreter_aux{
@@ -108,7 +77,7 @@
         typename C // Container
     >
     struct deduce_modifier_tag/*<-*/
-        : switch_aux::result< switch_tag::deduce_put, C>
+        : switch_aux::result< switch_tag::modifier_tag, C>
     {}/*->*/;
 
 //<-
Modified: sandbox/assign_v2/boost/assign/v2/option/data_generator.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/option/data_generator.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/option/data_generator.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -13,7 +13,6 @@
 #include <boost/assign/v2/detail/keyword.hpp>
 #include <boost/assign/v2/detail/pp/ignore.hpp>
 #include <boost/assign/v2/detail/traits/container.hpp>
-#include <boost/assign/v2/interpreter/data_generator.hpp>
 #include <boost/assign/v2/interpreter/fwd.hpp>
 #include <boost/assign/v2/interpreter/replace.hpp>
 #include <boost/assign/v2/option/list.hpp>
@@ -30,7 +29,7 @@
         typename C 		// Value or pointer-container
         , typename F	// Functor or keyword	
     >
-    struct deduce_generator/*<-*/
+    struct data_generator/*<-*/
     {
             typedef F type;
     }/*->*/;
@@ -38,27 +37,35 @@
     template<
         typename C // Multi-array
     >
-    struct deduce_generator<C, element_>/*<-*/
+    struct data_generator<C, element_>/*<-*/
     {
-        typedef functor_aux::value<
-            typename container_aux::element<C>::type
-        > type;
+    	typedef typename container_aux::element<C>::type element_;
+        typedef functor_aux::value<element_> type;
     }/*->*/;
 
     template<typename C>
-    struct deduce_generator<C, key_>/*<-*/
+    struct data_generator<C, key_>/*<-*/
     {
         typedef typename container_aux::key<C>::type key_;
         typedef functor_aux::value<key_> type;
         }/*->*/;
 
     template<typename C>
-    struct deduce_generator<C, use_default_>/*<-*/
+    struct data_generator<C, map_>/*<-*/
+    {
+        typedef typename container_aux::key<C>::type key_;
+        typedef typename container_aux::mapped<C>::type mapped_;
+        typedef typename container_aux::value<C>::type value_;
+        typedef functor_aux::pair<value_, key_, mapped_> type;
+	}/*->*/;
+
+    template<typename C>
+    struct data_generator<C, use_default_>/*<-*/
                 : deduce_data_generator<C>
     {}/*->*/;
 
     template<typename C>
-    struct deduce_generator<C, value_>/*<-*/
+    struct data_generator<C, value_>/*<-*/
     {
         typedef functor_aux::value<
             typename container_aux::value<C>::type
@@ -71,7 +78,7 @@
     struct option_data_generator/*<-*/
         : ::boost::mpl::apply1<
             interpreter_aux::replace_data_generator<D>, 
-            typename deduce_generator<C, F>::type
+            typename data_generator<C, F>::type
         >
     {}/*->*/;
         
@@ -79,7 +86,7 @@
 
     template<typename F/*<-*/= ignore_/*->*/>
     struct option_data_generator/*<-*/
-    	: option_listable<
+    	: option_crtp<
                 option_data_generator<F> 
         >
     {
@@ -87,58 +94,50 @@
         option_data_generator(F f) : f_( f ){}
 
         template<typename C>
-        F const& data_generator()const{ return this->f_; }
+        F const& get()const{ return this->f_; }
         
         private:
         F f_;
     }/*->*/;
 
+//<-
         template<typename Kwd>
     struct option_data_generator_helper
+    	: option_crtp<
+        	option_data_generator<Kwd> 
+        >
     {
-
                 template<typename C>
-        typename deduce_generator<C, Kwd>::type 
-        data_generator()const
+        typename data_generator<C, Kwd>::type 
+        get()const
         { 
-            return typename deduce_generator<C, Kwd>::type(); 
+            return typename data_generator<C, Kwd>::type(); 
         }
-    
     };
 
-    template<>
-    struct option_data_generator<use_default_>/*<-*/
-    	: option_data_generator_helper<use_default_>
-    {
-        option_data_generator(){}
-        option_data_generator(ignore_){}
-        
-    }/*->*/;
-
-    template<>
-    struct option_data_generator<key_>/*<-*/
-    	: option_data_generator_helper<key_>
-    {
-        option_data_generator(){}
-        option_data_generator(ignore_){}
-
-    }/*->*/;
-
-    template<>
-    struct option_data_generator<value_>/*<-*/
-    	: option_data_generator_helper<value_>
-    {
-        option_data_generator(){}
-        option_data_generator(ignore_){}
-
-    }/*->*/;
+#define BOOST_ASSIGN_V2_MACRO(Kwd)\
+    template<>\
+    struct option_data_generator<Kwd>\
+    	: option_data_generator_helper<Kwd>\
+    {\
+        option_data_generator(){}\
+        option_data_generator(ignore_){}\
+    };\
+/**/    
+BOOST_ASSIGN_V2_MACRO(element_)
+BOOST_ASSIGN_V2_MACRO(key_)
+BOOST_ASSIGN_V2_MACRO(map_)
+BOOST_ASSIGN_V2_MACRO(use_default_)
+BOOST_ASSIGN_V2_MACRO(value_)
+#undef BOOST_ASSIGN_V2_MACRO
+//->
 
     // Overrides data generator
-    template<typename C, typename F, typename ModifierTag
-        , typename DataTag, typename D, typename F1>
+    template<typename C, typename F, typename MTag
+        , typename DTag, typename D, typename F1>
     typename result_of::option_data_generator<D, C, F1>::type
     operator%(
-        interpreter_crtp<C, F, ModifierTag, DataTag, D> const& lhs,
+        interpreter_crtp<C, F, MTag, DTag, D> const& lhs,
         option_data_generator<F1> const& rhs
     )/*<-*/
     {
@@ -147,7 +146,7 @@
         >::type result_;
         return result_( 
             lhs.container(), 
-            rhs.template data_generator<C>(), 
+            rhs.template get<C>(), 
             lhs.modifier 
         );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
Modified: sandbox/assign_v2/boost/assign/v2/option/list.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/option/list.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/option/list.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -14,6 +14,7 @@
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/identity.hpp>
+#include <boost/mpl/or.hpp>
 #include <boost/typeof/typeof.hpp>
 #include <boost/type_traits/is_base_of.hpp>
 #include <boost/type_traits/is_same.hpp>
@@ -41,7 +42,7 @@
     };
 
     template<typename Head>
-    struct option_list_exit 
+    struct list_option_exit 
         : boost::is_same<Head, nil_>
     {};
 
@@ -51,7 +52,7 @@
         typename Head, 
         typename Tail, 
         typename Lhs, 
-        bool exit = option_list_exit<Head>::value
+        bool exit = list_option_exit<Head>::value
     >
     struct apply_list_option
     {
@@ -69,27 +70,74 @@
     >
     struct apply_list_option<Head, Tail, Lhs, true>
     {
-        typedef Lhs type;    
+        typedef Lhs const& type;    
     };
     
 }// result_of
     
-    struct list_option_base{};
-    
+    template<typename O, bool is_list = false> 
+    struct option_crtp{};
+	
+    template<typename O>
+    struct is_option_crtp 
+    	: boost::mpl::or_<
+        	boost::is_base_of< option_crtp<O, false>, O>,
+        	boost::is_base_of< option_crtp<O, true>, O>
+        >
+    {};
+
+	template<
+    	typename O	// O&&, O&
+    >
+    struct is_option_crtp_cpp0x : is_option_crtp<
+    	typename boost::remove_cv<
+        	typename boost::remove_reference<O>::type
+        >::type
+    >{};
+            
     template<
         typename Head = nil_, 
-        typename Tail = list_option_base, 
-        bool exit = option_list_exit<Head>::value
+        typename Tail = nil_, 
+        bool exit = list_option_exit<Head>::value
     >
-    struct list_option : public Tail
+    struct list_option;
+
+    template<typename Head, typename Tail, bool exit>
+    struct list_option_inherit 
+    	: Tail
+    {
+    	list_option_inherit(){}
+    	list_option_inherit( Tail tail ) 
+        	: Tail( tail )
+        {}
+    };
+
+    template<typename Head, typename Tail>
+    struct list_option_inherit<Head, Tail, true> 
+    	: Tail, 
+        option_crtp< 
+        	list_option<Head, Tail, true>,
+            true
+        >
+    {
+    	list_option_inherit(){}
+    	list_option_inherit( Tail tail ) 
+        	: Tail( tail )
+        {}
+    };
+
+    template<typename Head, typename Tail, bool exit>
+    struct list_option 
+    	: list_option_inherit<Head, Tail, exit>
     {
 
+		typedef list_option_inherit<Head, Tail, exit> super_t;
         typedef Head head_type;
         typedef Tail tail_type;
 
         list_option(){ /*exit = true*/ }
         list_option(Tail tail, Head h)
-            : Tail( tail ), head_( h )
+            : super_t( tail ), head_( h )
         {}
     
         template<typename O>
@@ -141,7 +189,7 @@
         list_option<H, T> const& list
     )
     {
-        return list.apply( lhs );
+        return list.apply( static_cast<D const&>( lhs ) );
     }
 
 namespace result_of{
@@ -159,12 +207,6 @@
         = interpreter_aux::empty_list_option();
 }
 namespace interpreter_aux{
-
-	template<typename O> 
-    struct option_listable 
-    	: list_option_base
-    {};
-
 namespace result_of{
 
         template<typename O1, typename O2>
@@ -182,22 +224,12 @@
     
     template<typename O1, typename O2>
     typename result_of::option_modulo<O1, O2>::type
-    operator%(option_listable<O1> const option1, O2 const& option2)
+    operator%(option_crtp<O1, false> const option1, O2 const& option2)
     {
             O1 const& ref = static_cast<O1 const&>( option1 );
                 return _list_option % ref % option2;
     }
 
-	template<typename Os>
-    struct is_option_listable 
-    	 : boost::is_base_of<
-         	list_option_base, 
-         	typename boost::remove_cv<
-            	typename boost::remove_reference<Os>::type
-            >::type
-         >
-    {};
-
 }// interpreter_aux
 }// v2
 }// assign
Modified: sandbox/assign_v2/boost/assign/v2/option/modifier/framework.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/option/modifier/framework.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/option/modifier/framework.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -28,7 +28,7 @@
         , typename Arg /*<-*/= ignore_/*->*/ // Specifies an aspect of the implementation
     >
     struct option_modifier/*<-*/
-    	: option_listable<
+    	: option_crtp<
                  option_modifier<Keyword, Arg> 
         >
     /*->*/
Modified: sandbox/assign_v2/boost/assign/v2/pipe/csv_put.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/pipe/csv_put.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/pipe/csv_put.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -79,17 +79,17 @@
             : list_option_( t, h )
         {}
 
-        template<typename Option>
+        template<typename O>
         struct modulo_result
         {
-            typedef arg_list_generator<Option, arg_list_generator> type;
+            typedef arg_list_generator<O, arg_list_generator> type;
         };
     
-        template<typename Option>
-        typename modulo_result<Option>::type
-        operator%(Option option)const
+        template<typename O>
+        typename modulo_result<O>::type
+        operator%(O option)const
         {
-            typedef typename modulo_result<Option>::type result_;
+            typedef typename modulo_result<O>::type result_;
             return result_( *this, option );
         }
 
@@ -104,7 +104,7 @@
             typedef typename result<0>::type result_;
             return result_(
                 *this,
-                ref::csv_array<na_>( _nil )
+                ref::csv_array<na_>()
             );
         }
  
Modified: sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -21,7 +21,7 @@
 #include <utility>
 #else
 #include <boost/assign/v2/detail/config/limit_csv_arity.hpp>
-#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control.hpp>
 #include <boost/preprocessor/repetition.hpp>
 #endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 
@@ -32,12 +32,12 @@
 namespace interpreter_aux{
 
         template<typename F>
-    struct csv_suitable
+    struct csv_ready
             : ::boost::mpl::true_
     {};
 
         template<typename T, typename K, typename M>
-    struct csv_suitable<
+    struct csv_ready<
                 functor_aux::pair<T, K, M>
     > 
             : ::boost::mpl::false_
@@ -46,29 +46,29 @@
 namespace result_of{
 
         template<typename C, typename F, typename MTag, typename DTag>
-	struct if_make_csv_suitable : ::boost::mpl::identity<
+	struct if_csv_ready : ::boost::mpl::identity<
             put_interpreter<C, F, MTag, DTag>
     >
     {};
 
         template<typename C, typename F, typename MTag, typename DTag>
-	struct else_make_csv_suitable : result_of::option_data_generator<
+	struct else_csv_ready : result_of::option_data_generator<
             put_interpreter<C, F, MTag, DTag>, C, value_
     >
     {};
 
         template<typename C, typename F, typename MTag, typename DTag>
-	struct make_csv_suitable : ::boost::mpl::eval_if<
-		csv_suitable<F>,
-        if_make_csv_suitable<C, F, MTag, DTag>,
-        else_make_csv_suitable<C, F, MTag, DTag>
+	struct make_csv_ready : ::boost::mpl::eval_if<
+		csv_ready<F>,
+        if_csv_ready<C, F, MTag, DTag>,
+        else_csv_ready<C, F, MTag, DTag>
     >{};
 
 }// result_of
 
         template<typename C, typename F, typename MTag, typename DTag>
-    typename result_of::if_make_csv_suitable<C, F, MTag, DTag>::type
-	make_csv_suitable( 
+    typename result_of::if_csv_ready<C, F, MTag, DTag>::type
+	make_csv_ready( 
             put_interpreter<C, F, MTag, DTag> const& interpreter, 
         boost::mpl::true_ suitable
     )
@@ -77,8 +77,8 @@
         }
 
         template<typename C, typename F, typename MTag, typename DTag>
-    typename result_of::else_make_csv_suitable<C, F, MTag, DTag>::type
-	make_csv_suitable( 
+    typename result_of::else_csv_ready<C, F, MTag, DTag>::type
+	make_csv_ready( 
             put_interpreter<C, F, MTag, DTag> const& interpreter, 
         boost::mpl::false_ suitable
     )
@@ -87,97 +87,89 @@
         }
 
         template<typename C, typename F, typename MTag, typename DTag>
-    typename result_of::make_csv_suitable<C, F, MTag, DTag>::type
-	make_csv_suitable( put_interpreter<C, F, MTag, DTag> const& interpreter)
+    typename result_of::make_csv_ready<C, F, MTag, DTag>::type
+	make_csv_ready( put_interpreter<C, F, MTag, DTag> const& interpreter)
     {
-		return make_csv_suitable( 
+		return make_csv_ready( 
                 interpreter, 
-            typename csv_suitable<F>::type() 
+            typename csv_ready<F>::type() 
         );
     }
 
-	template<typename C>
-    void csv_put( C& cont ){}
-
 //<-
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
 
 
-	template<typename C, typename T, typename Args>
-    typename boost::disable_if< is_option_listable<T> >::type
-    csv_put( C& cont, T&& t, Args&&... args)
+	template<typename C, typename O, bool is, typename Args>
+    typename boost::enable_if< 
+    	is_option_crtp<O> 
+    >::type csv_put( C& cont, option_crtp<O, is> const& crtp, Args&&... args )
     {
+    	O const& options = static_cast<O const&>( crtp );
             csv(
-    		make_csv_suitable( put( cont ) ),
-            std::forward<T>( t ),
+    		make_csv_ready( 
+                put( cont ) % options
+        	),
                   std::forward<Args>( args )...  
         );
     }
 
-	template<typename C, typename Options, typename Args>
-    typename boost::enable_if< is_option_listable<Options> >::type
-    csv_put( C& cont, Options&& options, Args&&... args)
+	template<typename C, typename Args>
+    typename boost::disable_if< 
+    	is_option_crtp<O> 
+    >::type csv_put( C& cont, Args&&... args)
     {
             csv(
-    		make_csv_suitable( 
-        		options.apply( put( cont ) )
-        	),
+    		make_csv_ready( put( cont ) ),
                   std::forward<Args>( args )...  
         );
     }
 
 //]
 #else
-#define BOOST_ASSIGN_V2_MACRO1(z, i, data) BOOST_PP_CAT(T, i) data
-#define BOOST_ASSIGN_V2_MACRO2(z, i, data) ( BOOST_PP_CAT(_, i) )
-#define BOOST_ASSIGN_V2_MACRO3(z, N, data)\
-    template<typename C, BOOST_PP_ENUM_PARAMS(N, typename T)>\
-    typename boost::disable_if< is_option_listable<T0> >::type\
-    csv_put( C& cont, BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _) )\
-    {\
-        csv(\
-        	make_csv_suitable( put( cont ) ) \
-        	, BOOST_PP_ENUM_PARAMS(N, _)\
-        );\
-    }\
-    template<typename C, typename Os, BOOST_PP_ENUM_PARAMS(N, typename T)>\
-    typename boost::enable_if< is_option_listable<Os> >::type\
-    csv_put( C& cont, Os const& options, BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _) )\
+
+	template<typename C>
+    void csv_put( C& cont ){}
+
+#define BOOST_ASSIGN_V2_MACRO(z, N, is_const)\
+    template<typename C, typename O, BOOST_PP_ENUM_PARAMS(N, typename T)>\
+	typename boost::enable_if<\
+    	is_option_crtp<O>\
+    >::type csv_put(\
+    	C& cont, O const& options,\
+        BOOST_PP_ENUM_BINARY_PARAMS(N, T, BOOST_PP_EXPR_IF(is_const, const)& _)\
+    )\
     {\
         csv(\
-        	make_csv_suitable( put( cont ) % options ) \
+        	make_csv_ready( put( cont ) % options ) \
                 , BOOST_PP_ENUM_PARAMS(N, _)\
         );\
     }\
     template<typename C, BOOST_PP_ENUM_PARAMS(N, typename T)>\
-    typename boost::disable_if< is_option_listable<T0> >::type\
-    csv_put( C& cont, BOOST_PP_ENUM_BINARY_PARAMS(N, T, const & _) )\
+    typename boost::disable_if<\
+    	is_option_crtp<T0>\
+    >::type csv_put(\
+    	C& cont,\
+        BOOST_PP_ENUM_BINARY_PARAMS(N, T, BOOST_PP_EXPR_IF(is_const, const)& _)\
+    )\
     {\
-        csv(\
-        	make_csv_suitable( put( cont ) ) \
-        	, BOOST_PP_ENUM_PARAMS(N, _)\
-        );\
-    }\
-    template<typename C, typename Os, BOOST_PP_ENUM_PARAMS(N, typename T)>\
-    typename boost::enable_if< is_option_listable<Os> >::type\
-    csv_put( C& cont, Os const& options, BOOST_PP_ENUM_BINARY_PARAMS(N, T, const & _) )\
-    {\
-        csv(\
-        	make_csv_suitable( put( cont ) % options ) \
-        	, BOOST_PP_ENUM_PARAMS(N, _)\
-        );\
+        csv( make_csv_ready( put( cont ) ), BOOST_PP_ENUM_PARAMS(N, _) );\
     }\
 /**/
 BOOST_PP_REPEAT_FROM_TO(
     1,
     BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
-    BOOST_ASSIGN_V2_MACRO3,
-    ~
+    BOOST_ASSIGN_V2_MACRO,
+    0
+)
+BOOST_PP_REPEAT_FROM_TO(
+    1,
+    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
+    BOOST_ASSIGN_V2_MACRO,
+    1
 )
-#undef BOOST_ASSIGN_V2_MACRO1
-#undef BOOST_ASSIGN_V2_MACRO2
-#undef BOOST_ASSIGN_V2_MACRO3
+#undef BOOST_ASSIGN_V2_MACRO
 #endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 
 }// interpreter_aux
Modified: sandbox/assign_v2/boost/assign/v2/put/delayed_csv_put.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/delayed_csv_put.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/delayed_csv_put.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -14,7 +14,6 @@
 #include <boost/assign/v2/detail/traits.hpp>
 #include <boost/assign/v2/put/put.hpp>
 #include <boost/assign/v2/option/list.hpp>
-#include <boost/assign/v2/option/data_generator.hpp>
 #include <boost/assign/v2/ref/array/as_arg_list.hpp>
 #include <boost/assign/v2/ref/array/csv_array.hpp>
 #include <boost/assign/v2/ref/wrapper/copy.hpp>
@@ -24,6 +23,7 @@
 #include <boost/mpl/vector/vector0.hpp>
 #if !BOOST_ASSIGN_V2_ENABLE_CPP0X
 #include <boost/assign/v2/detail/config/limit_csv_arity.hpp>
+#include <boost/assign/v2/ref/wrapper/cpp0x.hpp>
 #include <boost/mpl/aux_/na.hpp>
 #include <boost/preprocessor/arithmetic/inc.hpp>
 #include <boost/preprocessor/repetition.hpp>
@@ -38,137 +38,145 @@
 
     typedef ref::array_aux::size_type arg_list_size_type;
 
-    template<typename H, typename Tail, arg_list_size_type N, typename U>
-    struct arg_list : list_option<H, Tail>/*<-*/
+    template<arg_list_size_type N, typename U, typename Os = empty_list_option>
+    struct delayed_csv_put_holder/*<-*/
     {
-        typedef list_option<H, Tail> list_option_;
         typedef typename v2::ref::nth_result_of::csv_array<
             N, U
-        >::type arg_list_cont_type; //notice it's arg, not args
+        >::type arg_list_type; //notice it's arg, not args
 
-        arg_list(){}
-        arg_list(list_option_ const& l, arg_list_cont_type const& a)
-            : list_option_( l ), 
-            arg_list_cont_( a )
+        delayed_csv_put_holder(){}
+        delayed_csv_put_holder(arg_list_type const& a)
+            : arg_list_( a )
         {}
-
-        arg_list_cont_type const& arg_list_cont() const
-        {
-            return this->arg_list_cont_;
-        }
-
-        protected:
-        arg_list_cont_type arg_list_cont_;
-
-    }/*->*/;
-
-    template<
-        typename Head/*<-*/ = typename empty_list_option::head_type/*->*/, 
-        typename Tail/*<-*/ = typename empty_list_option::tail_type/*->*/
-    >
-    class arg_list_generator : public list_option<Head, Tail>/*<-*/
-    {
-
-        typedef ::boost::mpl::na na_;
-        typedef list_option<Head, Tail> list_option_;
-
-        public:
-
-        arg_list_generator(){}
-        explicit arg_list_generator(Tail const& t, Head const& h)
-            : list_option_( t, h )
+        delayed_csv_put_holder(Os options, arg_list_type const& a)
+            : options_( options ), arg_list_( a )
         {}
 
-        template<typename Option>
-        struct modulo_result
+        arg_list_type const& arg_list() const
         {
-            typedef arg_list_generator<Option, arg_list_generator> type;
-        };
-    
-        template<typename Option>
-        typename modulo_result<Option>::type
-        operator%(Option option)const
-        {
-            typedef typename modulo_result<Option>::type result_;
-            return result_( *this, option );
+            return this->arg_list_cont_;
         }
 
-        template<arg_list_size_type N, typename U = na_>
-        struct result{
-            typedef interpreter_aux::arg_list<Head, Tail, N, U> type;
-        };
-
-        typename result<0>::type
-        operator()()const
+        Os const& options() const
         {
-            typedef typename result<0>::type result_;
-            return result_(
-                *this,
-                ref::csv_array<na_>( _nil )
-            );
+            return this->options_;
         }
- 
-#if BOOST_ASSIGN_V2_ENABLE_CPP0X    
 
         protected:
-        template<typename T, typename...Args>
-        typename result<sizeof...(Args) + 1, T>::type
-        impl(T& t, Args&...args)const
-        {
-            typedef typename result<sizeof...(Args)+1, T>::type result_;
-            namespace ns = ref::assign_copy;
-            return result_(*this, ref::csv_array( t, args... ) );
-        }
+        Os options_;
+        arg_list_type arg_list_;
 
-        public:
+    }/*->*/;
+    
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
 
-        template<typename T, typename...Args>
-        typename boost::lazy_disable_if<
-            v2::type_traits::or_const<T, Args...>,
-            result<sizeof...(Args)+1, T>
-        >::type
-        operator()(T& t, Args&...args)const
-        {
-            return this->impl(t, args...);
-        }
+namespace result_of{
 
-        template<typename T, typename...Args>
-        typename result<sizeof...(Args)+1, T const>::type
-        operator()(T const& t, Args const&...args)const
-        {
-            return this->impl(t, args...);
-        }
+	template<arg_list_size_type N, typename U, typename Os = empty_list_option>
+    struct delayed_csv_put
+    {
+        typedef delayed_csv_put_holder<
+        	typename ref::wrapper_param<U>::type, N, Os
+        > type;
+    };
+
+}// result_of
+
+	// Explicit U
+
+	template<typename U, typename...Args>
+	typename result_of::delayed_csv_put<U, size_of...(Args)>::type
+	delayed_csv_put(Args&&... args)
+	{
+		return typename result_of::delayed_csv_put<U, size_of...(Args)>::type(
+			ref::csv_array<U>( std::forward<Args>( args )... )
+		);
+	}
+
+	template<typename U, typename O, bool is, typename...Args>
+	typename result_of::delayed_csv_put<U, size_of...(Args), O>::type
+	delayed_csv_put(option_crtp<O, is> const& crtp, Args&&... args)
+	{
+    	typedef O const& options_;
+        options_ options = static_cast<options_>( crtp );
+		return typename result_of::delayed_csv_put<
+        	U, size_of...(Args), O
+        >::type(
+			options,
+			ref::csv_array<U>( std::forward<Args>( args )... )
+		);
+	}
+
+	// Implicit U
+
+	template<typename U, typename...Args>
+	typename result_of::delayed_csv_put<U, 1 + size_of...(Args)>::type
+	delayed_csv_put(U&& u, Args&&... args)
+	{
+    	return delayed_csv_put<U>( 
+        	std::forward<U>( u ), 
+            std::forward<Args>( args ) ... 
+        );
+    }
 
+	template<typename U, typename O, bool is, typename...Args>
+	typename result_of::delayed_csv_put<U, 1 + size_of...(Args), O>::type
+	delayed_csv_put(option_crtp<O, is> const& crtp, U&& u, Args&&... args)
+	{
+    	return delayed_csv_put<U>( 
+        	crtp,  
+            std::forward<U>( u ), 
+            std::forward<Args>( args ) ... 
+        );
+	}
+    
 #else
 
-#define BOOST_ASSIGN_V2_MACRO1(N, U)\
-        return result_( \
-            *this, \
-            ref::csv_array<U>( BOOST_PP_ENUM_PARAMS(N, _) ) \
-        );\
-/**/
-#define BOOST_ASSIGN_V2_MACRO2(z, N, data)\
-        template<typename T>\
-        typename result<N, T>::type\
-        operator()( BOOST_PP_ENUM_PARAMS(N, T &_) )const \
-        { \
-            typedef typename result<N, T>::type result_;\
-            BOOST_ASSIGN_V2_MACRO1( N, T )\
-        } \
-        template<typename T>\
-        typename result<N, T const>::type\
-        operator()( BOOST_PP_ENUM_PARAMS(N, T const &_) )const \
-        { \
-            typedef typename result<N, T const>::type result_;\
-            BOOST_ASSIGN_V2_MACRO1( N, T const )\
-        } \
+	template<typename U>
+	typename result_of::delayed_csv_put<U, 0>::type
+	delayed_csv_put()
+	{
+		return typename result_of::delayed_csv_put<U, 0>::type(
+			ref::csv_array<U>();
+		);
+	}
+
+#define BOOST_ASSIGN_V2_MACRO2(z, N, U)\
+	template<typename T, arg_list_size_type N>\
+	typename result_of::delayed_csv_put<U, N>::type\
+	delayed_csv_put( BOOST_PP_ENUM_PARAMS(N, U &_) )\
+	{\
+		return typename result_of::delayed_csv_put<U, N>::type(\
+			ref::csv_array<U>( BOOST_PP_ENUM_PARAMS(N, _) )\
+		);\
+	}\
+	template<typename T, typename O, bool is, arg_list_size_type N>\
+	typename result_of::delayed_csv_put<U, N>::type\
+	delayed_csv_put(\
+    	option_crtp<O, is> const& crtp,\
+        BOOST_PP_ENUM_PARAMS(N, U &_)\
+    )\
+	{\
+    	typedef O const& options_;\
+        options_ options = static_cast<options_>( crtp );\
+		return typename result_of::delayed_csv_put<U, N>::type(\
+			ref::csv_array<U>( BOOST_PP_ENUM_PARAMS(N, _) )\
+		);\
+	}\
 /**/
 
 BOOST_PP_REPEAT_FROM_TO(
     1,
     BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
     BOOST_ASSIGN_V2_MACRO2,
-    ~
+    T
+)
+BOOST_PP_REPEAT_FROM_TO(
+    1,
+    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
+    BOOST_ASSIGN_V2_MACRO2,
+    T const
 )
 #undef BOOST_ASSIGN_V2_MACRO1
 #undef BOOST_ASSIGN_V2_MACRO2
@@ -177,39 +185,18 @@
 
     }/*->*/;
 
-    template<
-        typename C, typename H, typename T, 
-        arg_list_size_type N, typename U
-    >
-    C& operator|(C& cont, interpreter_aux::arg_list<H, T, N, U> const& arg_list)/*<-*/
+    template<typename C, arg_list_size_type N, typename U, typename Os>
+    C& operator|(C& cont, delayed_csv_put_holder<N, U, Os> const& rhs)/*<-*/
     {
-    	typedef typename ::boost::mpl::if_c<
-        	!container_aux::is_map<C>::value,
-            use_default_,
-            value_
-        >::type arg_;
-
-        v2::ref::as_arg_list(    
-            arg_list.apply( 
-            	put( cont ) % ( _data = arg_() ) 
-            ),
-            arg_list.arg_list_cont()
+        v2::ref::as_arg_list( 
+        	make_csv_ready( put( cont ) % rhs.options() ), 
+            rhs.arg_list() 
         );
         return cont;
 
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
 }// interpreter_aux 
-//<-
-namespace{
-//->
-
-    interpreter_aux::arg_list_generator<> const _csv_put/*<-*/
-        = interpreter_aux::arg_list_generator<>()/*->*/;
-
-//<-
-}
-//->
 //]
 }// v2
 }// assign
Modified: sandbox/assign_v2/boost/assign/v2/put/put.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/put.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/put.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -22,20 +22,19 @@
 //[syntax_put_put
 namespace interpreter_aux{
 
-    template<typename C, typename F, typename ModifierTag, typename DataTag>
+    template<typename C, typename F, typename MTag, typename DTag>
     class put_interpreter :
 //<-
-        protected ref::wrapper< ref::assign_tag::copy, C >,
+        protected ref::copy_wrapper< C >::type,
 //->
         public interpreter_aux::interpreter_crtp< 
-            C, 
-            F, 
-            ModifierTag, DataTag, put_interpreter<C, F, ModifierTag, DataTag> 
+            C, F, MTag, DTag, 
+            put_interpreter<C, F, MTag, DTag> 
         >
     {
 //<-
         typedef interpreter_aux::interpreter_crtp< 
-            C, F, ModifierTag, DataTag, put_interpreter 
+            C, F, MTag, DTag, put_interpreter 
         > super2_t;
 //->
         public:
@@ -46,7 +45,7 @@
 //<-
         protected:
 
-        typedef interpreter_aux::interpreter_modifier<ModifierTag> modifier_;
+        typedef interpreter_aux::interpreter_modifier<MTag> modifier_;
         typedef ref::assign_tag::copy assign_tag_;
         typedef ref::wrapper<assign_tag_,C> super1_t;
 //->
@@ -67,38 +66,38 @@
 
     };
 
-    template<typename C, typename F, typename ModifierTag, typename DataTag>
+    template<typename C, typename F, typename MTag, typename DTag>
     struct replace_data_generator< 
-        interpreter_aux::put_interpreter<C, F, ModifierTag, DataTag> 
+        interpreter_aux::put_interpreter<C, F, MTag, DTag> 
     >{
         template<typename F1>
         struct apply/*<-*/{ 
             typedef interpreter_aux::put_interpreter<
-                C, F1, ModifierTag, DataTag
+                C, F1, MTag, DTag
             > type; 
         }/*->*/;
     };
 
-    template<typename C, typename F, typename ModifierTag, typename DataTag>
+    template<typename C, typename F, typename MTag, typename DTag>
     struct replace_modifier_tag< 
-        interpreter_aux::put_interpreter<C, F, ModifierTag, DataTag> 
+        interpreter_aux::put_interpreter<C, F, MTag, DTag> 
     >{
-        template<typename ModifierTag1>
+        template<typename MTag1>
         struct apply/*<-*/{ 
             typedef interpreter_aux::put_interpreter<
-                C, F, ModifierTag1, DataTag
+                C, F, MTag1, DTag
             > type; 
         }/*->*/;
     };
 
-    template<typename C, typename F, typename ModifierTag, typename DataTag>
+    template<typename C, typename F, typename MTag, typename DTag>
     struct replace_data_tag< 
-        interpreter_aux::put_interpreter<C, F, ModifierTag, DataTag> 
+        interpreter_aux::put_interpreter<C, F, MTag, DTag> 
     >{
-        template<typename DataTag1>
+        template<typename DTag1>
         struct apply/*<-*/{ 
             typedef interpreter_aux::put_interpreter<
-                C, F, ModifierTag, DataTag1
+                C, F, MTag, DTag1
             > type; 
         }/*->*/;
     };
@@ -108,14 +107,14 @@
 
     template<
         typename C/*<-*/
-        , typename DataGenerator 
+        , typename DGen 
             = typename interpreter_aux::deduce_data_generator<C>::type 
     >
     struct put/*<-*/{
         typedef 
             interpreter_aux::put_interpreter<
                 C
-                , DataGenerator
+                , DGen
                 , typename interpreter_aux::deduce_modifier_tag<C>::type
                 , typename interpreter_aux::deduce_data_tag<C>::type
             > 
Modified: sandbox/assign_v2/boost/assign/v2/ref/array/csv_array.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/array/csv_array.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/array/csv_array.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -11,7 +11,6 @@
 #define BOOST_ASSIGN_V2_REF_ARRAY_CSV_ARRAY_ER_2010_HPP
 #include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #include <boost/assign/v2/detail/pp/ignore.hpp>
-#include <boost/assign/v2/detail/keyword.hpp>
 #include <boost/assign/v2/ref/array/alloc/instant.hpp>
 #include <boost/assign/v2/ref/array/size_type.hpp>
 
@@ -29,9 +28,7 @@
 namespace v2{
 //[syntax_ref_array_csv_array
 namespace ref{
-//<-
 namespace array_aux{
-//->
 namespace nth_result_of{
 
     template<
@@ -45,28 +42,29 @@
 
 }// result_of
 
+
     template<typename U>
     typename nth_result_of::csv_array<0, U>::type
-    csv_array( nil_ )/*<-*/
+    csv_array()/*<-*/
     {
         typedef typename nth_result_of::csv_array<0, U>::type result_;
         return result_();
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
-//<-
 }// array_aux
 using array_aux::csv_array;
 namespace nth_result_of{
 
     template<array_size_type N, typename U>
-    struct csv_array
+    struct csv_array/*<-*/
         : array_aux::nth_result_of::csv_array<N, U>
-    {};
+    {}/*->*/;
 
 }// nth_result_of
+/*<-*/
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
+/*->*/
 namespace array_aux{
-//->
 namespace result_of{
 
     template<typename U, typename... Args>
@@ -121,11 +119,7 @@
         return csv_helper<T const, Args const ...>::call( t, args... );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
-//<-
 }// array_aux
-
-using array_aux::csv_array;
-
 namespace result_of{
 
     template<typename U, typename... Args>
@@ -135,7 +129,8 @@
     {}/*->*/;
 
 }// result_of
-#endif
+//<-
+#endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
 }// ref
 //]
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -10,7 +10,6 @@
 #ifndef BOOST_ASSIGN_V2_REF_AUX_LIST_ER_2010_HPP
 #define BOOST_ASSIGN_V2_REF_AUX_LIST_ER_2010_HPP
 #include <boost/assign/v2/ref/aux_/list/array.hpp>
-#include <boost/assign/v2/ref/aux_/list/as_modulo_list.hpp>
 #include <boost/assign/v2/ref/aux_/list/at.hpp>
 #include <boost/assign/v2/ref/aux_/list/container.hpp>
 #include <boost/assign/v2/ref/aux_/list/fwd.hpp>
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list/array/policy.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list/array/policy.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list/array/policy.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -65,7 +65,7 @@
     };
 
     template<typename U1>
-    struct policy_helper2<U1, void_, nil >
+    struct policy_helper2<U1, void_, nil_ >
     {
         // Reached root
         typedef U1 type;
@@ -79,7 +79,7 @@
     >{};
 
     template<>
-    struct policy_helper3<void_, nil >
+    struct policy_helper3<void_, nil_ >
     {
         // Empty container
         typedef void_ type;
@@ -89,7 +89,7 @@
     struct policy<array_tag>
     {
 
-        template<typename H = void_, typename T = nil>
+        template<typename H = void_, typename T = nil_>
         struct apply
         {
             typedef alloc_tag::lazy_alloc tag_;
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-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -1,99 +1 @@
-//////////////////////////////////////////////////////////////////////////////
-//  Boost.Assign v2                                                         //
-//                                                                          //
-//  Copyright (C) 2003-2004 Thorsten Ottosen                                //
-//  Copyright (C) 2010 Erwann Rogard                                        //
-//  Use, modification and distribution are subject to 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)        //
-//////////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_ASSIGN_V2_LIST_REF_AS_MODULO_LIST_ER_2010_HPP
-#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>
-
-namespace boost{
-namespace assign{
-namespace v2{
-namespace ref{
-namespace list_aux{
-
-    template<size_type N, typename Lhs, typename ParList, 
-        bool exit = (N == ::boost::mpl::size<ParList>::value)>
-    struct as_modulo_list_impl
-    {
-        typedef typename ::boost::mpl::at_c<ParList, N>::type at_;
-        
-        template<typename P>
-        struct result
-        {
-            static Lhs lhs;
-            static P p;
-
-#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_;
-
-        typedef as_modulo_list_impl<N + 1, result_, ParList> next_;
-
-        typedef typename next_::type type;
-
-        template<typename RhsList>
-        static type call(Lhs const& lhs, RhsList const& rhs_list)
-        {
-            return next_::call( lhs % ref::at<N>( rhs_list ) , rhs_list );
-        }
-
-    };
-
-    template<size_type N, typename Lhs, typename ParList>
-    struct as_modulo_list_impl<N, Lhs, ParList, true>
-    {
-
-        typedef Lhs type;
-
-        template<typename RhsList>
-        static type call(Lhs const& lhs, RhsList const& rhs_list)
-        {
-            return lhs;
-        }
-
-    };
-
-namespace result_of{
-
-    // ParList could, in principle, be specified in terms (Tag, H, T), but we 
-    // chose not to (that would be less practical in client code).
-    template<typename Lhs, typename ParList>
-    struct as_modulo_list : as_modulo_list_impl<0, Lhs, ParList>{};
-    
-}// result_of
-
-    // Warning Parlist is first argument, here, whereas second in result_of::
-    template<typename ParList, typename Lhs, typename Tag, typename H, typename T>
-    typename result_of::as_modulo_list<Lhs, ParList>::type
-    as_modulo_list( Lhs const& lhs, container<Tag, H, T> const& rhs_list )
-    {
-        typedef result_of::as_modulo_list<Lhs, ParList> caller_;
-        return caller_::call( lhs, rhs_list );
-    }
-
-}// list_aux
-using namespace list_aux::result_of;
-using list_aux::as_modulo_list;
-}// ref
-}// v2
-}// assign
-}// boost
-
-#endif // BOOST_ASSIGN_V2_LIST_REF_AS_MODULO_LIST_ER_2010_HPP
+// TODO remove file
\ No newline at end of file
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-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -13,6 +13,7 @@
 #include <boost/assign/v2/ref/aux_/list/holder/tail.hpp>
 #include <boost/assign/v2/ref/aux_/list/holder/head.hpp>
 #include <boost/assign/v2/ref/aux_/list/policy.hpp>
+#include <boost/mpl/bool.hpp>
 #include <boost/call_traits.hpp>
 #include <boost/mpl/apply.hpp>
 #include <boost/type_traits/is_same.hpp>
@@ -33,8 +34,13 @@
         typedef tail_holder<T> tail_holder_;
         typedef head_holder<H> head_holder_;
 
+		typedef boost::mpl::false_ false_;
+		typedef boost::mpl::true_ true_;
+
         public:
 
+		typedef boost::is_same<T, nil_> is_empty;
+
         container(){}
 
         template<typename H1>
@@ -43,26 +49,37 @@
             typedef container<Tag, H1, this_> type;
         };
 
-        explicit container(
-            typename boost::call_traits<T>::param_type t,
-            H h
-        ):
-            tail_holder_( t )
-            , head_holder_( h )
+        explicit container(typename ptr_wrapper<T>::type t, H h)
+        	: 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_( *this, h );
+        operator()(H1& h)const{ 
+    		return this->impl( h ); 
         }
 
         template<typename H1>
         typename result<H1 const&>::type
-        operator()(H1 const& h)const{
-            typedef typename result<H1 const&>::type result_;
-            return result_( *this, h );
+        operator()(H1 const& h)const{ 
+        	return this->impl( h ); 
+        }
+        
+        protected:
+
+		typename ptr_wrapper<container>::type clone()const
+        {
+        	return typename ptr_wrapper<container>::type( 
+            	new container( *this ) 
+            ); 
+        }
+
+        template<typename H1>
+        typename result<H1&>::type
+        impl(H1 & h)const{
+            typedef typename result<H1&>::type result_;
+            return result_( this->clone(), h );
         }
 
     };
Modified: sandbox/assign_v2/boost/assign/v2/ref/aux_/list/fwd.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/aux_/list/fwd.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/aux_/list/fwd.hpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -9,6 +9,7 @@
 //////////////////////////////////////////////////////////////////////////////
 #ifndef BOOST_ASSIGN_V2_REF_AUX_LIST_FWD_ER_2010_HPP
 #define BOOST_ASSIGN_V2_REF_AUX_LIST_FWD_ER_2010_HPP
+#include <boost/assign/v2/detail/keyword.hpp>
 
 namespace boost{
 namespace assign{
@@ -21,9 +22,8 @@
     template<typename Tag> struct empty_list;
 
     struct void_;
-    struct nil;
 
-    template<typename Tag, typename H = void_, typename T = nil>
+    template<typename Tag, typename H = void_, typename T = nil_>
     class container;
 
 }// 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-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -9,9 +9,11 @@
 //////////////////////////////////////////////////////////////////////////////
 #ifndef BOOST_ASSIGN_V2_REF_AUX_LIST_HOLDER_TAIL_ER_2010_HPP
 #define BOOST_ASSIGN_V2_REF_AUX_LIST_HOLDER_TAIL_ER_2010_HPP
+#include <boost/assign/v2/detail/keyword.hpp>
+#include <boost/assign/v2/ref/aux_/list/fwd.hpp>
 #include <boost/config.hpp>
 #include <boost/mpl/int.hpp>
-#include <boost/assign/v2/ref/aux_/list/fwd.hpp>
+#include <boost/shared_ptr.hpp>
 
 namespace boost{
 namespace assign{
@@ -19,28 +21,33 @@
 namespace ref{
 namespace list_aux{
 
-    struct nil{ nil(){} };
+	template<typename T>
+    struct ptr_wrapper
+    {
+    	typedef boost::shared_ptr<T const> type;
+    };
 
     template<typename T>
     struct tail_holder
     {
-
-
         typedef T tail_type;
-        typedef ::boost::mpl::int_<T::static_size::value + 1> static_size;
+        typedef ::boost::mpl::int_<
+        	T::static_size::value + 1
+        > static_size;
         typedef T const& result_of_tail_type;
+		typedef typename ptr_wrapper<T>::type ptr_wrapper_;
 
-        tail_holder(T const& t) : tail_( t ){}
-        result_of_tail_type tail()const{ return this->tail_; }
+        tail_holder(ptr_wrapper_ w) : tail_( w ){}
+        result_of_tail_type tail()const{ return *this->tail_; }
 
         private:
-        T const tail_; // A reference would cause ref to temporary
+        typename ptr_wrapper<T>::type const tail_; 
     };
 
     template<>
-    struct tail_holder<nil>
+    struct tail_holder<nil_>
     {
-        typedef nil tail_type;
+        typedef nil_ tail_type;
         typedef ::boost::mpl::int_<0> static_size;
         tail_holder(){}
 
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-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -61,18 +61,18 @@
     }
     {
         using namespace test_assign_v2;
-        xxx_chain::test();
-        xxx_conversion::test();
-        xxx_detail::test();
+        //xxx_chain::test();
+        //xxx_conversion::test();
+        //xxx_detail::test();
         xxx_deque::test();
-        xxx_interpreter::test();
+        //xxx_interpreter::test();
         xxx_option::test();
-        xxx_pipe::test();
+        //xxx_pipe::test();
         xxx_put::test();
         xxx_ref::test();
     }
     {
-        tutorial_assign_v2::run();
+        //tutorial_assign_v2::run();
     }
     {/*
         using namespace speed_assign_v2;
Modified: sandbox/assign_v2/libs/assign/v2/test/conversion.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/conversion.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/conversion.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -41,15 +41,19 @@
         {
             //[test_conversion_vec_array
             std::vector<int> r( 3 ); r[0] = 1 ; r[1] = 10; r[2] = 100;
+
             typedef array<int, 3> ar_; 
             ar_ const& ar = ( r | as2::convert<ar_>() );
             
-            BOOST_ASSIGN_V2_CHECK( range::equal( ar, as2::csv_deque( 1 , 10, 100 ) ) );
+            BOOST_ASSIGN_V2_CHECK( 
+            	range::equal( ar, as2::csv_deque( 1 , 10, 100 ) ) 
+            );
             //]
         }
         {
             //[test_conversion_vec_stack
             std::vector<int> r( 3 ); r[0] = 1 ; r[1] = 10; r[2] = 100;
+            
             std::stack<int> lifo = as2::converter( r );
             
             BOOST_ASSIGN_V2_CHECK( lifo.top() == 100 );
@@ -57,7 +61,8 @@
         }
         {
             //[test_conversion_stl
-            typedef int T; typedef std::vector<T> R; R r( 3 ); r[0] = 1 ; r[1] = 10; r[2] = 100; 
+            typedef int T; typedef std::vector<T> R; 
+            R r( 3 ); r[0] = 1 ; r[1] = 10; r[2] = 100; 
             f< std::vector<T> >( as2::converter( r ), r );
             f< std::deque<T> >( as2::converter( r ), r );
             f< std::list<T> >( as2::converter( r ), r );
@@ -95,7 +100,7 @@
         }
         {
             //[test_conversion_ref_array_stack
-            std::stack<int> lifo = /*<<Notice unqualified (name lookup)>>*/converter( as2::ref::array( 1  )( 10 )( 100 ) );
+            std::stack<int> lifo = /*<<Notice unqualified (name lookup)>>*/converter( as2::ref::array( 1 )( 10 )( 100 ) );
             
             BOOST_ASSIGN_V2_CHECK( lifo.top() == 100 );
             //]
Modified: sandbox/assign_v2/libs/assign/v2/test/deque.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/deque.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/deque.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -27,23 +27,6 @@
         using namespace boost;
         namespace as2 = assign::v2;
         {
-            //[test_deque_ints
-            typedef as2::result_of::deque<int>::type C;
-
-            C empty_cont = as2::deque<int>( as2::_nil );
-            C cont1 = empty_cont( 1 )( 10 )( 100 );
-            C cont2 = as2::deque<int>( 1 )( 10 )( 100 );
-    
-            std::deque<int> benchmark; 
-            benchmark.push_back( 1 );
-            benchmark.push_back( 10 );
-            benchmark.push_back( 100 );
-
-            BOOST_ASSIGN_V2_CHECK( range::equal( benchmark, cont1 ) );
-            BOOST_ASSIGN_V2_CHECK( range::equal( benchmark, cont2 ) );
-            //]
-        }
-        {
             //[test_deque_str_literal
             typedef as2::result_of::deque<char*>::type C;
             
@@ -59,39 +42,30 @@
         }
         {
             //[test_deque_pair
-            typedef std::string str_;
-            typedef std::pair<str_, str_> T;
+            typedef std::string code_; typedef std::string name_;
+            typedef std::pair<code_, name_> T;
             typedef as2::result_of::deque<T>::type C;
-            C airports = as2::deque<T>("AUH", "Abu Dhabi")("JFK", "New York")("LHR", "London")("PEK", "Beijing");
+            
+            C airports1 = as2::deque<T>( as2::_nil );
+            BOOST_ASSIGN_V2_CHECK( airports1.empty() );
+            airports1("AUH", "Abu Dhabi")("JFK", "New York")("LHR", "London")("PEK", "Beijing");
             
             std::deque<T> benchmark;
             benchmark.push_back( T("AUH", "Abu Dhabi") );
             benchmark.push_back( T("JFK", "New York") );
-            benchmark.push_back( T("LHR", "Heathrow") );
+            benchmark.push_back( T("LHR", "London") );
             benchmark.push_back( T("PEK", "Beijing") );
-            
-            range::equal( benchmark, airports );            
+            BOOST_ASSIGN_V2_CHECK( 
+            	range::equal( benchmark, airports1 )
+            ); 
+            
+            C airports2 = as2::deque<T>("AUH", "Abu Dhabi")("JFK", "New York")("LHR", "London")("PEK", "Beijing");
+            BOOST_ASSIGN_V2_CHECK( 
+            	range::equal( benchmark, airports2 )
+            ); 
             //]
         }
-        {
-            //[test_csv_deque_ints
-            typedef as2::result_of::csv_deque<int>::type C;
-            
-            BOOST_MPL_ASSERT(( is_same<C, as2::result_of::deque<int>::type> ));
-
-            C cont1 = as2::csv_deque( 1, 10, 100 );
-            C cont2 = as2::csv_deque( 1, 10 )( 100 );
-    
-            std::deque<int> benchmark; 
-            benchmark.push_back( 1 );
-            benchmark.push_back( 10 );
-            benchmark.push_back( 100 );
-
-            BOOST_ASSIGN_V2_CHECK( range::equal( benchmark, cont1 ) );
-            BOOST_ASSIGN_V2_CHECK( range::equal( benchmark, cont2 ) );
-            //]
-        }
-        {
+       {
             //[test_csv_deque_str_literal
             typedef as2::result_of::csv_deque<const char[2]>::type C;
             
@@ -107,6 +81,31 @@
             BOOST_ASSIGN_V2_CHECK( range::equal( benchmark, deque ) );
             //]
         }
+
+        {
+            //[test_csv_deque_ints
+            typedef as2::result_of::csv_deque<int>::type C;
+            
+            BOOST_MPL_ASSERT(( is_same<C, as2::result_of::deque<int>::type> ));
+
+            C series1 = as2::csv_deque( 0, 1, 1, 2, 3, 5, 8 );
+    
+            std::deque<int> benchmark; 
+            benchmark.push_back( 0 );
+            benchmark.push_back( 1 );
+            benchmark.push_back( 1 );
+            benchmark.push_back( 2 );
+            benchmark.push_back( 3 );
+            benchmark.push_back( 5 );
+            benchmark.push_back( 8 );
+
+            BOOST_ASSIGN_V2_CHECK( range::equal( benchmark, series1 ) );
+
+            C series2 = as2::csv_deque( 0, 1, 1 )( 2 )( 3 )( 5 )( 8 );
+
+            BOOST_ASSIGN_V2_CHECK( range::equal( benchmark, series2 ) );
+            //]
+        }
     }
 
 }// xxx_deque
Modified: sandbox/assign_v2/libs/assign/v2/test/interpreter/modifier.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/interpreter/modifier.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/interpreter/modifier.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -30,9 +30,9 @@
 namespace xxx_interpreter{
 namespace xxx_modifier{
 
-    // --User may skip this file-- //
-    // It checks internal details. //
-    // --------------------------- //        
+    // ------------------------ //        
+    // Checks internal details. //
+    // ------------------------ //        
 
     void test()
     {
Modified: sandbox/assign_v2/libs/assign/v2/test/option.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -25,7 +25,7 @@
         xxx_mapped::test();
         xxx_list::test();
         xxx_repeat::test();
-        // xxx_row_major::test(); // TODO
+        xxx_row_major::test();
         xxx_standard::test();
     }
 
Modified: sandbox/assign_v2/libs/assign/v2/test/option/data.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option/data.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option/data.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -53,17 +53,22 @@
         }
         {
             //[test_option_data_recursive
-            using namespace lambda;
             int i = 1, k = 1;
+			
             BOOST_AUTO(
                 factorials, (
                     as2::deque<int>( as2::_nil ) % (
-                        as2::_data = ( var(k) *= ( var(i)++ ) )
+                        as2::_data = ( lambda::var( k ) *= ( lambda::var( i )++ ) )
                     )
-                )/*<<Equivalent to `factorials( k *= i++ )` for [^i = 1, ..., 5]>>*/()()()()()
+                )()()()()()
             );
 
-            BOOST_ASSIGN_V2_CHECK( range::equal( factorials, as2::csv_deque( 1, 2, 6, 24, 120 ) ) );
+            BOOST_ASSIGN_V2_CHECK( 
+            	range::equal( 
+                	factorials, 
+                    as2::csv_deque( 1, 2, 6, 24, 120 ) 
+                ) 
+            );
             //]
         }
         {
Modified: sandbox/assign_v2/libs/assign/v2/test/option/iterate.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option/iterate.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option/iterate.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -7,16 +7,13 @@
 //  Boost Software License, Version 1.0. (See accompanying file             //
 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)        //
 //////////////////////////////////////////////////////////////////////////////
-#include <vector>
+#include <list>
 #include <boost/array.hpp>
 #include <boost/assign/v2/detail/config/check.hpp>
 #include <boost/assign/v2/deque.hpp>
 #include <boost/assign/v2/option/modifier/iterate.hpp> 
 #include <boost/assign/v2/put/csv_put.hpp>
-#include <boost/assign/v2/put/put.hpp>
 #include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
-#include <boost/lambda/construct.hpp>
 #include <boost/mpl/assert.hpp>
 #include <boost/mpl/apply.hpp>
 #include <boost/range/algorithm/equal.hpp>
@@ -47,7 +44,6 @@
         }
         {
             //[test_option_iterate_shifted
-            using namespace lambda;
             typedef int T; array<T, 10> alternating; 
             alternating[0] = -1; alternating[1] = +1;
             alternating[2] = -2; 
@@ -55,7 +51,7 @@
             int index = 3; 
             as2::csv_put( 
                     alternating
-                , as2::_iterate = var( index )++
+                , as2::_iterate = lambda::var( index )++
                     , +2, -3, +3, -4, +4, -5, +5 
             );
 
@@ -67,7 +63,6 @@
             );
             //]
         }
-/*
         {
             //[test_option_iterate_meta_deque
             typedef as2:: interpreter_aux::keyword_iterate keyword_;
@@ -82,17 +77,14 @@
         }
         {
             //[test_option_iterate_shifted_deque
-            using namespace lambda;
-            
-            as2::result_of::deque<int>::type incomplete 
-                = as2::deque<int>( -1 )( +1 )( -2 )
-                    ( as2::as_arg_list( std::vector<int>( 7 ) ) );
+            as2::result_of::csv_deque<int>::type tmp = as2::csv_deque<int>
+                ( -1, +1, -2, as2::as_arg_list( std::list<int>( 7 ) ) );
+
             int index = 3; 
-            
             BOOST_AUTO(
                 alternating ,
                 ( 
-                    incomplete  % ( as2::_iterate = var( index )++ ) 
+                    tmp  % ( as2::_iterate = lambda::var( index )++ ) 
                 )( +2 )( -3 )( +3 )( -4 )( +4 )( -5 )( +5 )
             );
 
@@ -104,7 +96,6 @@
             );
             //]
         }
-*/
     }
 
 }// xxx_iterate
Modified: sandbox/assign_v2/libs/assign/v2/test/option/list.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option/list.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option/list.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -9,12 +9,13 @@
 //////////////////////////////////////////////////////////////////////////////
 #include <deque>
 #include <boost/assign/v2/detail/config/check.hpp>
-#include <boost/assign/v2/put/put.hpp>
+#include <boost/assign/v2/deque/csv_deque.hpp>
 #include <boost/assign/v2/option/list.hpp>
 #include <boost/assign/v2/option/data_generator.hpp>
 #include <boost/assign/v2/option/modifier/std.hpp>
+#include <boost/assign/v2/put/put.hpp>
 #include <boost/lambda/lambda.hpp>
-#include <boost/static_assert.hpp>
+#include <boost/range/algorithm/equal.hpp>
 #include <boost/typeof/typeof.hpp>
 #include <libs/assign/v2/test/option/list.h>
 
@@ -24,23 +25,31 @@
 
     void test()
     {
-        using namespace boost::assign::v2;
-        std::deque<int> cont;
+    	using namespace boost;
+        namespace as2 = assign::v2;
+        
+        {
+        	//[test_option_list
+        	std::deque<int> cont;
+			( as2::put( cont ) % as2::_list_option )( 4 )( 5 );
+            
+            BOOST_ASSIGN_V2_CHECK( cont[0] == 4 );
+        	BOOST_ASSIGN_V2_CHECK( cont[1] == 5 );
 
-        ( _list_option ).apply( put( cont ) )( 1 );
-        BOOST_ASSIGN_V2_CHECK( cont[0] == 1 );
-        using namespace boost::lambda;
-        BOOST_AUTO( 
-            apply, 
-            ( 
-                _push_front % ( _data = ( _1 % 10 ) ) 
-            ).apply( put( cont ) ) 
-        );
-        apply( 15 );
-        BOOST_ASSIGN_V2_CHECK( cont[0] == 5 );
-        BOOST_ASSIGN_V2_CHECK( cont[1] == 1 );
-    }
+        	BOOST_AUTO( 
+            	options, 
+            	as2::_push_front % ( as2::_data = ( lambda::_1 % 10 ) ) 
+        	);
+        	( as2::put( cont ) % options )( 13 )( 12 )( 11 );
 
+        	BOOST_ASSIGN_V2_CHECK( 
+            	range::equal( cont, as2::csv_deque( 1, 2, 3, 4, 5 ) ) 
+            );
+            //]
+    	}
+
+    }
+    
 }// xxx_list
 }// xxx_option
 }// xxx_test_assign
Modified: sandbox/assign_v2/libs/assign/v2/test/option/mapped.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option/mapped.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option/mapped.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -10,10 +10,10 @@
 #include <map>
 #include <string>
 #include <cmath>
+#include <list>
 #include <boost/assign/v2/detail/config/check.hpp>
 #include <boost/assign/v2/put/put.hpp>
 #include <boost/assign/v2/deque.hpp>
-// Options come next
 #include <boost/assign/v2/option/data_generator.hpp>
 #include <boost/assign/v2/option/modifier/mapped.hpp>
 #include <boost/lambda/lambda.hpp>
@@ -35,23 +35,21 @@
         namespace as2 = assign::v2;
         {
             //[test_option_mapped_map
-            using namespace lambda;
             typedef std::string month_; typedef int days_;
             typedef std::map<month_, days_> C; C year;
             (
-                as2::put( year )( "feb", 28 )( "apr", 30 )( "jun", 30 )( "sep", 30 )( "nov", 30 )
-                    % (as2::_data = as2::_key) 
-                    	% ( as2::_mapped = ( _1 = 31 ) )
+                as2::put( year )
+                	( "feb", 28 )( "apr", 30 )( "jun", 30 )( "sep", 30 )( "nov", 30 )
+                    % ( as2::_data = as2::_key ) % ( as2::_mapped = ( lambda::_1 = 31 ) )
             )/*<<Calls `year[ month_( "jan" ) ] = 31`>>*/( "jan" )( "mar" )( "may" )( "jul" )( "aug" )( "oct" )( "dec" );
-
+			
             BOOST_ASSIGN_V2_CHECK( year["jan"] == 31 );
             BOOST_ASSIGN_V2_CHECK( year["dec"] == 31 );
             //]
         }
         {
             //[test_option_mapped_meta_deque
-            using namespace lambda;
-            typedef BOOST_TYPEOF(_1) arg_;
+            typedef BOOST_TYPEOF(lambda::_1) arg_;
             typedef as2:: interpreter_aux::keyword_mapped keyword_;
             typedef as2::result_of::deque<int>::type put_;
             typedef as2::result_of::option_mapped<put_, arg_>::type result1_;
@@ -62,17 +60,21 @@
             //]
         }
         {
-            //[test_option_mapped_map_deque
-            using namespace lambda;
+            //[test_option_mapped_deque
             BOOST_AUTO(
-                days_in_first_quater,
+                alternating,
                 (
-                    as2::deque<int>( 31 )( 31 )( 31 ) % ( as2::_mapped = ( _1 -= 3 ) )
-                )( 1 )
+                    as2::deque<int>( 
+                    	as2::as_arg_list( std::list<int>( 10, 1 ) ) 
+                    ) % ( as2::_mapped = ( lambda::_1 *= -1 ) )
+                )( 1 )( 3 )( 5 )( 7 )( 9 )
+            );
+            BOOST_ASSIGN_V2_CHECK( 
+            	range::equal(
+                	alternating,
+                    as2::csv_deque( +1, -1, +1, -1, +1, -1, +1, -1, +1, -1 )
+                )
             );
-            BOOST_ASSIGN_V2_CHECK( days_in_first_quater[0] == 31 );
-            BOOST_ASSIGN_V2_CHECK( days_in_first_quater[1] == 28 );
-            BOOST_ASSIGN_V2_CHECK( days_in_first_quater[2] == 31 );
             //]
         }
     }
Modified: sandbox/assign_v2/libs/assign/v2/test/option/std_modifier.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option/std_modifier.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option/std_modifier.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -83,7 +83,8 @@
         {
             //[test_option_insert
             // NB: This option is dedundant with the default
-            std::set<std::string> letters; as2::csv_put( letters, as2::_insert, "d", "a", "c", "b" );
+            std::set<std::string> letters; 
+            as2::csv_put( letters, as2::_insert, "d", "a", "c", "b" );
 
             BOOST_ASSIGN_V2_CHECK( letters.lower_bound( "a" ) == boost::begin( letters ) );
             BOOST_ASSIGN_V2_CHECK( letters.upper_bound( "d" ) == boost::end( letters ) );
@@ -116,10 +117,12 @@
             //[test_option_push_front_deque
             BOOST_AUTO(
                 two_power_n,
-                ( as2::deque<int>( as2::_nil ) % as2::_push_front )( 16 )( 8 )( 4 )( 2 )( 1 )
+                as2::csv_deque( as2::_push_front, 16, 8, 4, 2, 1 )
             );
 
-            BOOST_ASSIGN_V2_CHECK( range::equal( two_power_n, as2::csv_deque( 1, 2, 4, 8, 16 ) ) );
+            BOOST_ASSIGN_V2_CHECK( 
+            	range::equal( two_power_n, as2::csv_deque( 1, 2, 4, 8, 16 ) ) 
+            );
             //]
         }
     }
Modified: sandbox/assign_v2/libs/assign/v2/test/pipe/option/data.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/pipe/option/data.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/pipe/option/data.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -31,12 +31,12 @@
         {
             //[test_pipe_option_data_math
             int k = 1; std::list<int> factorials;
-            using namespace lambda;
             
             BOOST_ASSIGN_V2_CHECK(
                 range::equal(
                     factorials | ( 
-                        as2::_csv_put % ( as2::_data = ( var(k) *= _1 ) ) 
+                        as2::_csv_put 
+                        	% ( as2::_data = ( lambda::var(k) *= lambda::_1 ) ) 
                     )/*<<Equivalent to calling `factorials.push_back( k *= ++i )`>>*/( 1, 2, 3, 4, 5 ),
                     as2::csv_deque<int>( 1, 2, 6, 24, 120 )
                 )
Modified: sandbox/assign_v2/libs/assign/v2/test/pipe/option/iterate.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/pipe/option/iterate.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/pipe/option/iterate.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -36,11 +36,10 @@
             alternating[2] = -2;
 
             int i = 3; 
-            using namespace lambda;
             BOOST_ASSIGN_V2_CHECK(
                 boost::range::equal(
                     alternating | ( 
-                        as2::_csv_put % ( as2::_iterate = var( i )++ ) 
+                        as2::_csv_put % ( as2::_iterate = lambda::var( i )++ ) 
                     )( +2, -3, +3, -4, +4, -5, +5 ),
                     as2::csv_deque<T>( -1, +1, -2, +2, -3, +3, -4, +4, -5, +5 )    
                 )
Modified: sandbox/assign_v2/libs/assign/v2/test/pipe/option/mapped.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/pipe/option/mapped.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/pipe/option/mapped.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -48,12 +48,11 @@
             
             BOOST_AUTO( apply, as2::_csv_put % (as2::_data = as2::_key) );
             C cal; as2::put( cal )("feb", 28);
-            using namespace lambda;
             BOOST_ASSIGN_V2_CHECK(
                 range::equal(
                     cal 
-                        | ( apply % ( as2::_mapped = (_1 = 30) ) )( "apr", "jun", "sep", "nov" )
-                        | ( apply % ( as2::_mapped = (_1 = 31) ) )( "jan", "mar", "may", "jul", "aug", "oct", "dec" ),
+                        | ( apply % ( as2::_mapped = (lambda::_1 = 30) ) )( "apr", "jun", "sep", "nov" )
+                        | ( apply % ( as2::_mapped = (lambda::_1 = 31) ) )( "jan", "mar", "may", "jul", "aug", "oct", "dec" ),
                     benchmark
                 )
             );
@@ -78,12 +77,11 @@
             
             C cal; as2::put( cal )("feb", 28);
             BOOST_AUTO( apply, as2::_csv_put % (as2::_data = as2::_key) );
-            using namespace lambda;
             BOOST_ASSIGN_V2_CHECK(
                 range::equal(
                     cal 
-                        | ( apply % ( as2::_mapped = (_1 = 30) ) )( "apr", "jun", "sep", "nov" )
-                        | ( apply % ( as2::_mapped = (_1 = 31) ) )( "jan", "mar", "may", "jul", "aug", "oct", "dec" ),
+                        | ( apply % ( as2::_mapped = ( lambda::_1 = 30) ) )( "apr", "jun", "sep", "nov" )
+                        | ( apply % ( as2::_mapped = ( lambda::_1 = 31) ) )( "jan", "mar", "may", "jul", "aug", "oct", "dec" ),
                     benchmark
                 )
             );
Modified: sandbox/assign_v2/libs/assign/v2/test/put/put.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/put/put.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/put/put.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -182,18 +182,18 @@
         // OTHER
         {
             //test_csv_put_cb
-              boost::circular_buffer<int> cb(3);
-             as2::csv_put( cb, 1, 2, 3 );
+            boost::circular_buffer<int> cb(3);
+            as2::csv_put( cb, 1, 2, 3 );
              
-             BOOST_ASSIGN_V2_CHECK(
-                 range::equal(cb, as2::csv_deque(1, 2, 3) )
-             );
+            BOOST_ASSIGN_V2_CHECK(
+            	range::equal(cb, as2::csv_deque(1, 2, 3) )
+            );
 
-             as2::csv_put( cb, 4, 5 );
+            as2::csv_put( cb, 4, 5 );
 
-             BOOST_ASSIGN_V2_CHECK(
-                 range::equal(cb, as2::csv_deque(3, 4, 5) )
-             );
+            BOOST_ASSIGN_V2_CHECK(
+            	range::equal(cb, as2::csv_deque(3, 4, 5) )
+            );
             //]
         }
     }// test()
Modified: sandbox/assign_v2/libs/assign/v2/test/ref.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/ref.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/ref.cpp	2011-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -18,13 +18,11 @@
 namespace xxx_ref{
 
     void test(){
-
         xxx_array::test();
         xxx_csv_array::test();
         xxx_aux_::test();
         xxx_get::test();
         xxx_wrapper::test();
-
     }
 
 }// xxx_ref
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-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -29,6 +29,7 @@
         using namespace boost;
         namespace as2 = assign::v2;
         {
+        	
             //[test_ref_array_temporaries
             boost::array<int, 3> ar; 
             ar[0] = 1; ar[1] = 10; ar[2] = 100;
@@ -44,7 +45,7 @@
         {
             //[test_ref_array_read
             typedef int const T;
-            T w = 11, x = 72, y = 31, z = 48;
+            T w = 1, x = 10, y = 100, z = 1000;
             as2::ref::nth_result_of::array<3, T>::type ar3 
                 = as2::ref::array( w )( x )( y );
             {
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-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -24,9 +24,9 @@
 namespace xxx_aux_{
 namespace xxx_list{
 
-    // --User may skip this file-- //
-    // It checks internal details. //
-    // --------------------------- //        
+    // ------------------------ //        
+    // Checks internal details. //
+    // -------------------------//
 
     void test()
     {
@@ -44,7 +44,7 @@
             typedef add_reference<t1_>::type r1_;
             typedef add_reference<t2_>::type r2_;
 
-            t0_ a = 0;
+            t0_ a = 100;
             t2_ c = "c";
 
             typedef as2::ref::nth_result_of::list<tag_> result_;
@@ -54,10 +54,9 @@
 
 // Reminder : temporaries destroyed at the semi-colon
 // Implication : don't try to save the result.
-#define BOOST_ASSIGN_V2_macro as2::ref::list<tag_>( as2::_nil )( a )( 2 )( c )
-
+#define BOOST_ASSIGN_V2_macro as2::ref::list<tag_>( as2::_nil )( a )( -1 )( c )
             BOOST_ASSIGN_V2_CHECK( &as2::ref::at<0>( BOOST_ASSIGN_V2_macro ) == &a );
-            BOOST_ASSIGN_V2_CHECK( as2::ref::at<1>( BOOST_ASSIGN_V2_macro ) == 2 );
+            BOOST_ASSIGN_V2_CHECK( as2::ref::at<1>( BOOST_ASSIGN_V2_macro ) == -1 ); 
             BOOST_ASSIGN_V2_CHECK( str_( as2::ref::at<2>( BOOST_ASSIGN_V2_macro ) ) == c );
 #undef BOOST_ASSIGN_V2_macro
         }
@@ -82,7 +81,7 @@
         {
             typedef as2::ref::alloc_tag::lazy_alloc tag_;
             typedef as2::ref::list_aux::void_ void_;
-            typedef as2::ref::list_aux::nil nil_;
+            typedef as2::nil_ nil_;
             typedef as2::ref::empty_list<tag_>::type empty_;
             {
                 typedef void_ u1_; typedef nil_ l_;
@@ -93,7 +92,7 @@
                 typedef mpl::apply2<
                     as2::ref::list_aux::policy<tag_>,
                     as2::ref::list_aux::void_,
-                    as2::ref::list_aux::nil
+                    nil_
                 >::type po_; // just see that it compiles
             }
             {
@@ -114,7 +113,6 @@
                     BOOST_MPL_ASSERT(( is_same<val_, int const> ));
                 }
             }
-
         }
         {
             typedef int t_; typedef add_reference<t_>::type r_;
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-04-05 21:23:03 EDT (Tue, 05 Apr 2011)
@@ -49,9 +49,8 @@
         }
         {
             //[tutorial_piping
-            using namespace lambda;
             std::deque<int> cont;
-            range::stable_partition( cont | _csv_put( 0, 1, 2, 3, 4, 5 ), _1 % 2 );
+            range::stable_partition( cont | _csv_put( 0, 1, 2, 3, 4, 5 ), lambda::_1 % 2 );
             //]
             //[tutorial_container_generation
             assert( range::equal( cont, csv_deque(1, 3, 5, 0, 2, 4) ) );
@@ -122,9 +121,9 @@
             alternating[0] = -1; alternating[1] = +1; 
             alternating[2] = -2;
 
-            C::size_type index = 3; using namespace lambda;
+            C::size_type index = 3; 
             ( 
-                put( alternating ) % ( _iterate = var( index )++ ) 
+                put( alternating ) % ( _iterate = lambda::var( index )++ ) 
             )( +2 )( -3 )( +3 )( -4 )( +4 )( -5 )( +5 );
 
             assert(