$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r71102 - in sandbox/assign_v2: boost/assign/v2/conversion boost/assign/v2/deque boost/assign/v2/detail boost/assign/v2/interpreter boost/assign/v2/put boost/assign/v2/ref/array libs/assign/v2 libs/assign/v2/test libs/assign/v2/test/option libs/assign/v2/test/put libs/assign/v2/test/unit_testing
From: erwann.rogard_at_[hidden]
Date: 2011-04-07 21:45:40
Author: e_r
Date: 2011-04-07 21:45:39 EDT (Thu, 07 Apr 2011)
New Revision: 71102
URL: http://svn.boost.org/trac/boost/changeset/71102
Log:
upd assign_v2
Text files modified: 
   sandbox/assign_v2/boost/assign/v2/conversion/check.hpp     |     8 ----                                    
   sandbox/assign_v2/boost/assign/v2/conversion/convert.hpp   |    20 +++++-----                              
   sandbox/assign_v2/boost/assign/v2/conversion/converter.hpp |    12 +++---                                  
   sandbox/assign_v2/boost/assign/v2/deque/csv_deque.hpp      |    50 ++++--------------------                
   sandbox/assign_v2/boost/assign/v2/detail/speed.hpp         |     3 -                                       
   sandbox/assign_v2/boost/assign/v2/interpreter/csv.hpp      |    17 ++++----                                
   sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp          |    63 +++++++++++++++++++------------         
   sandbox/assign_v2/boost/assign/v2/ref/array/csv_array.hpp  |     6 +-                                      
   sandbox/assign_v2/libs/assign/v2/test/conversion.cpp       |    52 +++++++++++++-------------              
   sandbox/assign_v2/libs/assign/v2/test/option/data.cpp      |    31 ++++++++-------                         
   sandbox/assign_v2/libs/assign/v2/test/put/put.cpp          |    80 ++++++++++++++++++++--------------------
   sandbox/assign_v2/libs/assign/v2/test/unit_testing/put.cpp |     2                                         
   sandbox/assign_v2/libs/assign/v2/tutorial.cpp              |    20 +++++++---                              
   13 files changed, 174 insertions(+), 190 deletions(-)
Modified: sandbox/assign_v2/boost/assign/v2/conversion/check.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/conversion/check.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/conversion/check.hpp	2011-04-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -53,14 +53,6 @@
         typedef std::stack<int> stack_;
         typedef std::vector<int> vec_;
 
-        BOOST_MPL_ASSERT(( as2::conversion_aux::use_put<ar_, R> ));
-        BOOST_MPL_ASSERT(( as2::conversion_aux::use_put<stack_, R> ));
-        BOOST_MPL_ASSERT(( as2::conversion_aux::use_put<queue_, R> ));
-        BOOST_MPL_ASSERT_NOT(( as2::conversion_aux::use_put<deque_, R> ));
-        BOOST_MPL_ASSERT_NOT(( as2::conversion_aux::use_put<list_, R> ));
-        BOOST_MPL_ASSERT_NOT(( as2::conversion_aux::use_put<set_, R> ));
-        BOOST_MPL_ASSERT_NOT(( as2::conversion_aux::use_put<vec_, R> ));
-
         BOOST_MPL_ASSERT(( boost::is_same<
                 typename as2::conversion_aux::deduce_tag<ar_, R>::type,
                 convert_tag::put
Modified: sandbox/assign_v2/boost/assign/v2/conversion/convert.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/conversion/convert.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/conversion/convert.hpp	2011-04-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -34,10 +34,10 @@
         return cont;
     }
 
-	template<typename C, typename Arg>
+    template<typename C, typename Arg>
     Arg const& initializer( Arg const& arg )
     {
-    	return arg;
+        return arg;
     }
 
     template<typename C, typename Arg, typename R>
@@ -75,7 +75,7 @@
     template<typename C, typename Arg = nil_>
     struct convert/*<-*/{
     
-    	convert(){}
+        convert(){}
         convert(Arg arg):arg_( arg ){}
         
         Arg const& arg()const{ return this->arg_; }
@@ -93,23 +93,23 @@
 
 }// conversion_aux
 
-	template<typename C, typename Arg = nil_>
-	struct convert/*<-*/
-    	: conversion_aux::convert<C, Arg>
+    template<typename C, typename Arg = nil_>
+    struct convert/*<-*/
+        : conversion_aux::convert<C, Arg>
     {
     
-    	typedef conversion_aux::convert<C> super_t;
+        typedef conversion_aux::convert<C> super_t;
         
-    	convert()/*<-*/{}/*->*/
+        convert()/*<-*/{}/*->*/
         convert(Arg const& arg)
-        	: super_t( arg )
+            : super_t( arg )
         {}
                 
         template<typename Arg1>
         convert<C, Arg1>
         operator+=(Arg1 const& arg1)
         {
-        	return convert<C, Arg1>( arg1 );
+            return convert<C, Arg1>( arg1 );
         }
     
     }/*->*/;
Modified: sandbox/assign_v2/boost/assign/v2/conversion/converter.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/conversion/converter.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/conversion/converter.hpp	2011-04-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -28,16 +28,16 @@
     class converter
     {
 
-		typedef boost::iterator_range<
-        	typename boost::range_iterator<
-            	typename boost::add_const<R>::type
+        typedef boost::iterator_range<
+            typename boost::range_iterator<
+                typename boost::add_const<R>::type
             >::type
         > source_type;
 
         public:
 
         explicit converter(
-        	Arg const& arg, 
+            Arg const& arg, 
             typename call_traits<R>::param_type source
         )/*<-*/
              : arg_( arg ), source_( boost::make_iterator_range( source ) )
@@ -56,14 +56,14 @@
         template<typename C>
         C type()const/*<-*/
         {
-        	typedef convert<C, Arg> convert_;
+            typedef convert<C, Arg> convert_;
             return this->source_ | convert_( this->arg_ );
         }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
 //<-
         private:
         Arg arg_;
-		source_type source_;
+        source_type source_;
 //->
     };
 
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-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -45,7 +45,7 @@
     {}/*->*/;
 
     template<typename Os, typename T>
-    struct csv_deque_option/*<-*/    
+    struct csv_deque_option/*<-*/
         : modulo_result<
             typename result_of::csv_deque<T>::type,
             Os
@@ -58,23 +58,20 @@
     typename result_of::csv_deque<T>::type
     csv_deque()/*<-*/{
         return typename result_of::csv_deque<T>::type();
-    }/*->*/;
+    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
 //<-
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
-        
-    // Explicit T
-    
-    template<typename T, typename U, typename... Args>
+    template<typename T, typename... Args>
     typename boost::lazy_disable_if<
-        is_option_crtp_cpp0x<U>,
+        is_option_crtp_cpp0x<T>,
         result_of::csv_deque<T>
     >::type
-    csv_deque(U&& u, Args&& ...  args)/*<-*/
+    csv_deque(T&& t, Args&& ...  args)/*<-*/
     {
         typename result_of::csv_deque<T>::type result;
-        csv( result, std::forward<U>( u ), std::forward<Args>( args )... );
+        csv( result, std::forward<T>( t ), std::forward<Args>( args )... );
         return result;
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
@@ -83,45 +80,16 @@
         is_option_crtp<O>,
         result_of::csv_deque_option<O, T>
     >::type
-    csv_deque(O const& options, Args&& ...  args)/*<-*/
+    csv_deque(O const& options, T&& t, 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 )... );
+        csv( result, std::forward<T>( t ), std::forward<Args>( args )... );
         return result;
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
-    // Implicit T
-    
-    template<typename T, typename... Args>
-    typename boost::lazy_disable_if<
-        is_option_crtp_cpp0x<T>,
-        result_of::csv_deque<T>
-    >::type
-    csv_deque(T&& t, Args&& ...  args)/*<-*/
-    {
-        csv_deque<T>( 
-            std::forward<T>( t ), 
-            std::forward<Args>( args )... 
-        );
-    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
-
-    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(/*->*/;/*<-*/)/*->*/
-
 //<-
 #endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
@@ -143,7 +111,7 @@
     {}/*->*/;
 
     template<typename Os, typename T>
-    struct csv_deque_option/*<-*/    
+    struct csv_deque_option/*<-*/
         : interpreter_aux::result_of::csv_deque_option<Os, T>
     {}/*->*/;
 
Modified: sandbox/assign_v2/boost/assign/v2/detail/speed.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/detail/speed.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/detail/speed.hpp	2011-04-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -21,9 +21,8 @@
 #include <boost/assign/list_inserter.hpp>
 #include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
-#include <boost/assign/v2/put/put.hpp>
+#include <boost/assign/v2/put.hpp>
 #include <boost/assign/v2/deque.hpp>
-#include <boost/assign/v2/pipe/csv_put.hpp>
 #include <boost/assign/v2/ref/array/array.hpp>
 #include <boost/assign/v2/ref/array/csv_array.hpp>
 #include <boost/type_traits/remove_reference.hpp>
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-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -35,20 +35,21 @@
 //->
 
     template<typename C, typename F, typename MTag, typename DTag, typename D>
-    void csv( 
+    void csv(
         interpreter_crtp<C, F, MTag, DTag, D> const& interpreter
     )/*<-*/
     {
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
-    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 
+    template<typename C, typename F, typename MTag, typename DTag, typename D
+        , typename T, typename... Args>
+    void csv(
+        interpreter_crtp<C, F, MTag, DTag, D> const& interpreter,
+        T&& t, Args&&... args
     )/*<-*/
     {
-        return csv( 
-            interpreter( std::forward<T>( t ) ), 
-            std::forward<Args>( args )... 
+        return csv(
+            interpreter( std::forward<T>( t ) ),
+            std::forward<Args>( args )...
         );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
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-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -44,7 +44,7 @@
 namespace result_of{
 
     template<typename C, typename F, typename MTag, typename DTag>
-    struct if_csv_ready/*<-*/ 
+    struct if_csv_ready/*<-*/
         : ::boost::mpl::identity<
             put_interpreter<C, F, MTag, DTag>
         >
@@ -71,8 +71,8 @@
 /*<-*/
     template<typename C, typename F, typename MTag, typename DTag>
     typename result_of::if_csv_ready<C, F, MTag, DTag>::type
-    make_csv_ready( 
-        put_interpreter<C, F, MTag, DTag> const& interpreter, 
+    make_csv_ready(
+        put_interpreter<C, F, MTag, DTag> const& interpreter,
         boost::mpl::true_ suitable
     )
     {
@@ -81,8 +81,8 @@
 
     template<typename C, typename F, typename MTag, typename DTag>
     typename result_of::else_csv_ready<C, F, MTag, DTag>::type
-    make_csv_ready( 
-        put_interpreter<C, F, MTag, DTag> const& interpreter, 
+    make_csv_ready(
+        put_interpreter<C, F, MTag, DTag> const& interpreter,
         boost::mpl::false_ suitable
     )
     {
@@ -93,9 +93,9 @@
     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_ready( 
-            interpreter, 
-            typename csv_ready<F>::type() 
+        return make_csv_ready(
+            interpreter,
+            typename csv_ready<F>::type()
         );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
@@ -103,29 +103,42 @@
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
 
-    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 )
+    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_ready( 
+            make_csv_ready(
                 put( cont ) % options
             ),
-              std::forward<Args>( args )...  
+              std::forward<Args>( args )...
         );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
-    template<typename C, typename Args>
-    typename boost::disable_if< 
-        is_option_crtp<O> 
-    >::type csv_put( C& cont, Args&&... args)/*<-*/
+    template<typename C, typename T, typename... Args>
+    typename boost::disable_if<
+        is_option_crtp_cpp0x<T>
+    >::type csv_put( C& cont, T&& t, Args&&... args)/*<-*/
     {
         csv(
             make_csv_ready( put( cont ) ),
-              std::forward<Args>( args )...  
+              std::forward<T>( t ),
+              std::forward<Args>( args )...
+        );
+    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
+
+    template<typename C>
+    void csv_put( C& cont)/*<-*/
+    {
+        csv(
+            make_csv_ready( put( cont ) )
         );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
@@ -158,7 +171,7 @@
             )(
                 static_cast<super2_t const&>( *this )
             );
-            
+
             return cont;
         }
 
@@ -182,7 +195,7 @@
 
 
 }// result_of
-    
+
     template<typename R>
     typename result_of::delay_csv_put<R const>::type
     delay_csv_put(R const& range)/*<-*/
@@ -195,12 +208,12 @@
     typename result_of::delay_csv_put<R const, Os>::type
     delay_csv_put(option_crtp<Os> const& options, R const& range)/*<-*/
     {
-        return delayed_csv_put<R const, Os>( 
-            static_cast<Os const&>( options ), range 
+        return delayed_csv_put<R const, Os>(
+            static_cast<Os const&>( options ), range
         );
     }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
 
-}// interpreter_aux 
+}// interpreter_aux
 //<-
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
@@ -214,7 +227,7 @@
 namespace result_of{
 
     template<typename R, typename Os = empty_list_option_>
-    struct delay_csv_put 
+    struct delay_csv_put
         : interpreter_aux::result_of::delay_csv_put<R, Os>
     {};
 
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-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -56,7 +56,7 @@
 namespace result_of{
 
     template<typename U, typename... Args>
-    struct csv_array/*<-*/ 
+    struct csv_array/*<-*/
         : nth_result_of::csv_array<
             1 + sizeof...(Args),  U
         >
@@ -122,8 +122,8 @@
 namespace result_of{
 
     template<typename U, typename... Args>
-    struct csv_array/*<-*/ 
-        : array_aux::csv_array<U, ...Args>
+    struct csv_array/*<-*/
+        : array_aux::result_of::csv_array<U, Args...>
     {}/*->*/;
 
 }// result_of
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-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -72,27 +72,27 @@
             as2::result_of::converter<R>::type source( benchmark );
             
             { 
-            	typedef boost::array<T, 10> C;
+                typedef boost::array<T, 10> C;
                 f<C>( source, benchmark );
             }
             { 
-            	typedef std::deque<T> C;
+                typedef std::deque<T> C;
                 f<C>( source, benchmark );
             }
             { 
-            	typedef std::list<T> C;
+                typedef std::list<T> C;
                 f<C>( source, benchmark );
             }
             { 
-            	typedef std::queue<T> C;
+                typedef std::queue<T> C;
                 f<C>( source, benchmark );
             }
             { 
-            	typedef std::stack<T> C;
+                typedef std::stack<T> C;
                 f<C>( source, benchmark );
             }
             { 
-            	typedef std::vector<T> C;
+                typedef std::vector<T> C;
                 f<C>( source, benchmark );
             }
             //]
@@ -119,7 +119,7 @@
         {
             //[test_converter_from_deque
             typedef array<int, 5> C; C const& ar = /*<<Notice unqualified>>*/converter( 
-            	as2::csv_deque( 1, 2, 3, 4, 5 )
+                as2::csv_deque( 1, 2, 3, 4, 5 )
             );
             
             BOOST_ASSIGN_V2_CHECK( 
@@ -135,28 +135,28 @@
             //]
         }
         {
-        	//[test_converter_multi_array
-        	typedef boost::multi_array<int, 2> array2_;
-        	typedef array2_::size_type size_;
-        	typedef size_ const dim_;
-        	dim_ dim1 = 3, dim2 = 3;
-        	array2_ array2 = converter( 
-            	extents[dim1][dim2], 
+            //[test_converter_multi_array
+            typedef boost::multi_array<int, 2> array2_;
+            typedef array2_::size_type size_;
+            typedef size_ const dim_;
+            dim_ dim1 = 3, dim2 = 3;
+            array2_ array2 = converter( 
+                extents[dim1][dim2], 
                 as2::csv_deque(-1, +1, -1, +1, -1, +1, -1, +1, -1) 
             );
             
-        	const int benchmark [] = {
-            	-1, +1, -1,
-            	+1, -1, +1,
-            	-1, +1, -1
-        	};
-        	size_ const n = array2.num_elements();
-        	BOOST_ASSIGN_V2_CHECK(
-            	range::equal(
-                	make_iterator_range( array2.data(), n + array2.data() ),
-                	make_iterator_range( benchmark, n + benchmark )
-            	)
-        	);
+            const int benchmark [] = {
+                -1, +1, -1,
+                +1, -1, +1,
+                -1, +1, -1
+            };
+            size_ const n = array2.num_elements();
+            BOOST_ASSIGN_V2_CHECK(
+                range::equal(
+                    make_iterator_range( array2.data(), n + array2.data() ),
+                    make_iterator_range( benchmark, n + benchmark )
+                )
+            );
             //]
         }
     }
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-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -26,6 +26,9 @@
 #include <boost/typeof/typeof.hpp>
 #include <libs/assign/v2/test/option/data.h>
 
+// TODO
+#include <iostream>
+
 namespace test_assign_v2{
 namespace xxx_option{
 namespace xxx_data{
@@ -40,10 +43,10 @@
             std::vector<double> exponent;
             /*<-*/typedef double(*fp)(double);/*->*/
             typedef function<double(double)> f_;
-            as2::csv_put( 
+            as2::csv_put(
                 exponent
-                , as2::_data = f_( /*<-*/fp(/*->*/ log10 /*<-*/)/*->*/ ) 
-                , 1.0, 10.0, 100.0, 1000.0, 10000.0 
+                , as2::_data = f_( /*<-*/fp(/*->*/ log10 /*<-*/)/*->*/ )
+                , 1.0, 10.0, 100.0, 1000.0, 10000.0
             );
 
             double eps = numeric::bounds<double>::smallest();
@@ -54,25 +57,25 @@
         {
             //[test_option_data_recursive
             int k = 1;
-            
-            BOOST_ASSIGN_V2_CHECK( 
-                range::equal( 
-                    as2::csv_deque<int>( 
-                        as2::_data = ( lambda::var( k ) *= lambda::_1 ), 
-                        1, 2, 3, 4, 5 
-                    ), 
-                    as2::csv_deque( 1, 2, 6, 24, 120 ) 
-                ) 
+
+            BOOST_ASSIGN_V2_CHECK(
+                range::equal(
+                    as2::csv_deque(
+                        as2::_data = ( lambda::var( k ) *= lambda::_1 ),
+                        1, 2, 3, 4, 5
+                    ),
+                    as2::csv_deque( 1, 2, 6, 24, 120 )
+                )
             );
             //]
         }
         {
             //[test_option_data_value
-            typedef std::string word_; 
+            typedef std::string word_;
             const char x[] = "foo";
             const char y[4] = { 'b', 'a', 'r', '\0' };
             word_ z = "***baz";
-            typedef std::map<int, word_> C; 
+            typedef std::map<int, word_> C;
             typedef C::value_type T;
             typedef C::mapped_type D;
             C map;
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-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -73,8 +73,8 @@
             std::vector<int> numeric( 10 ); iota( numeric, 0 ); typedef std::string str_;
             typedef variant< int, str_ > key_; array<key_, 16> keypad;
             as2::csv_put( keypad
-                , "+", "-", "*", "/", "=", "." 
-                , as2::as_arg_list( numeric ) 
+                , "+", "-", "*", "/", "=", "."
+                , as2::as_arg_list( numeric )
             );
 
             BOOST_ASSIGN_V2_CHECK(  get<str_>( keypad.front() ) == "+" );
@@ -110,13 +110,13 @@
         }
         // SEQUENCE
         {
-			// Note that although `number( str_( "011" ) )`, for instance, 
+            // Note that although `number( str_( "011" ) )`, for instance,
             // is valid, `range_3bit.push_back( str_( "011" ) )` isn't
             //[test_csv_put_bitset
-            typedef std::string str_; typedef std::bitset<3> number; 
+            typedef std::string str_; typedef std::bitset<3> number;
             std::vector<number> range_3bit;
-            as2::csv_put( 
-            	range_3bit
+            as2::csv_put(
+                range_3bit
                 , str_( "000" ), str_( "001" )
                 , str_( "010" ), str_( "011" )
                 , str_( "100" ), str_( "101" )
@@ -134,8 +134,8 @@
             // http://bioinfo.mbb.yale.edu/~mbg/dom/fun3/area-codes/
             //[test_put_area_codes
             typedef const char state_ [3]; state_ ct = "CT", nj = "NJ", ny = "NY";
-            typedef int code_; 
-            typedef tuple<state_/*<<Notice the [*reference]>>*/&,  code_> data_; 
+            typedef int code_;
+            typedef tuple<state_/*<<Notice the [*reference]>>*/&,  code_> data_;
             std::deque< data_ > region;
             as2::put( region )
                 ( ny, 212 )( ny, 718 )( ny, 516 )( ny, 914 )
@@ -149,20 +149,20 @@
             BOOST_ASSIGN_V2_CHECK(  get<0>( region.back()  ) == ct );
         }
         //SET
-        {    
+        {
             //[test_csv_put_unordered_set
             typedef std::string word_;
             typedef boost::unordered_set<word_> C;
-            
+
             C set, benchmark;
             benchmark.insert( "foo" );
             benchmark.insert( "bar" );
             benchmark.insert( "baz" );
-            
+
             BOOST_ASSIGN_V2_CHECK(
                 range::equal(
-                    set | as2::delay_csv_put( 
-                        as2::csv_deque<word_>( "foo", "bar", "baz" ) 
+                    set | as2::delay_csv_put(
+                        as2::csv_deque<word_>( "foo", "bar", "baz" )
                     ),
                     benchmark
                 )
@@ -170,14 +170,14 @@
             //]
         }
         // MAP
-        {    
+        {
             //[test_put_unordered_map
-            typedef std::string word_; 
+            typedef std::string word_;
             const char x[] = "foo";
             const char y[4] = { 'b', 'a', 'r', '\0' };
             word_ z = "***baz";
             boost::unordered_map<int, word_> map;
-                        
+
             as2::put( map )( 1, x, 3 )( 2, y )( 3, z, 3, 3 )( 4, "qux");
 
             assert( map[1] == "foo" ); assert( map[2] == "bar" );
@@ -187,10 +187,10 @@
         {
             //[test_csv_put_map
             typedef std::string month_; typedef int days_;
-            typedef std::map<month_, days_> C; 
+            typedef std::map<month_, days_> C;
             typedef C::value_type T;
             C map, benchmark;
-                        
+
             as2::csv_put( map, T("jan", 31 ), T( "feb", 28 ), T( "mar", 31 ) );
 
             BOOST_ASSIGN_V2_CHECK( map["jan"] == 31 );
@@ -203,25 +203,25 @@
             //[test_csv_put_multi_array
             typedef boost::multi_array<int, 3> array3_;
             typedef array3_::size_type size_;
-        
-            typedef const int dim_;
-            dim_ dim1 = 2, dim2 = 3, dim3 = 4; 
-            
+
+            typedef const size_ dim_;
+            dim_ dim1 = 2, dim2 = 3, dim3 = 4;
+
             using boost::extents;
             array3_ array3( extents[dim1][dim2][dim3] );
 
-            as2::csv_put( 
+            as2::csv_put(
                 array3,
-                 0,  1,  2,  3,    
-                 4,  5,  6,  7,    
-                 8,  9, 10, 11,    
-
-                12, 13, 14, 15,    
-                16, 17, 18, 19,    
-                20, 21, 22, 23    
+                 0,  1,  2,  3,
+                 4,  5,  6,  7,
+                 8,  9, 10, 11,
+
+                12, 13, 14, 15,
+                16, 17, 18, 19,
+                20, 21, 22, 23
             );
-            
-            size_ i = 0;
+
+            int i = 0;
             for( size_ i1 = 0; i1 < dim1; i1++ )
             {
                 for( size_ i2 = 0; i2 < dim2; i2++ )
@@ -248,32 +248,32 @@
 
             BOOST_ASSIGN_V2_CHECK(
                 boost::range::equal(
-                    as2::csv_deque( 
-                        view[0][0], view[0][1], 
+                    as2::csv_deque(
+                        view[0][0], view[0][1],
                         view[1][0], view[1][1]
                     ),
-                    as2::csv_deque( 
-                        99, 98, 
+                    as2::csv_deque(
+                        99, 98,
                         97, 96
                     )
                 )
             );
-        
+
         }
         // OTHER
         {
             //test_csv_put_cb
             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::delay_csv_put( as2::csv_deque( 4, 5 ) ), 
-                    as2::csv_deque(3, 4, 5) 
+                    cb | as2::delay_csv_put( as2::csv_deque( 4, 5 ) ),
+                    as2::csv_deque(3, 4, 5)
                 )
             );
             //]
Modified: sandbox/assign_v2/libs/assign/v2/test/unit_testing/put.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/unit_testing/put.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/unit_testing/put.cpp	2011-04-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -13,8 +13,8 @@
 #include <boost/test/test_tools.hpp>
 #define BOOST_ASSIGN_V2_CHECK( p ) BOOST_CHECK( p )
 
+#include <libs/assign/v2/test/put/put.cpp> // has to come first as overrides LIMIT_CSV_ARITY
 #include <libs/assign/v2/test/put/ptr.cpp>
-#include <libs/assign/v2/test/put/put.cpp>
 
 #include <boost/test/unit_test.hpp>
 using boost::unit_test::test_suite;
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-07 21:45:39 EDT (Thu, 07 Apr 2011)
@@ -48,20 +48,26 @@
         }
         {
             //[tutorial_delay_csv_put
-            std::deque<int> source( 6 ), sorted; iota( source, 0 );
+            std::deque<int> source( 6 ), target; iota( source, 0 );
             
             range::stable_partition( 
-            	sorted | delay_csv_put( source ), 
+                target | delay_csv_put( source ), 
                 lambda::_1 % 2 
             );
             //]
             //[tutorial_csv_deque
-            assert( 
-                range::equal( sorted, csv_deque(1, 3, 5, 0, 2, 4) ) 
+            assert(    
+                range::equal( target, csv_deque(1, 3, 5, 0, 2, 4) ) 
             );
             //]
         }
         {
+            //[tutorial_empty_deque
+            assert( deque<int>( _nil ).size() == 0 );	// Functor form
+            assert( csv_deque<int>().size() == 0 );		// Csv form
+            //]
+        }
+        {
             //[tutorial_ref_array
             int x = 4, y = 6, z = -1;
             int const& max = *max_element( ref::csv_array( x, y, z ) );
@@ -102,7 +108,9 @@
             typedef std::queue<int> C;
             
             C fifo = converter( csv_deque( 1, 2, 3 ) );
-            assert( fifo.front() == 1 ); assert( fifo.back() == 3 );
+            
+            assert( fifo.front() == 1 ); 
+            assert( fifo.back() == 3 );
             //]
 
             //[tutorial_convert
@@ -118,7 +126,7 @@
             const char y[4] = { 'b', 'a', 'r', '\0' };
             word_ z = "***baz";
             std::map<int, word_> map;
-            put( map )/*<<Calls `map.insert( 1, str_( foo, 3 ) )`>>*/( 1, x, 3 )( 2, y )( 3, z, 3, 3 )( 4, "qux");
+            put( map )/*<<Calls `map.insert( 1, word_( x, 3 ) )`>>*/( 1, x, 3 )( 2, y )( 3, z, 3, 3 )( 4, "qux");
 
             assert( map[1] == "foo" ); assert( map[2] == "bar" );
             assert( map[3] == "baz" ); assert( map[4] == "qux" );