$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r55187 - in sandbox/SOC/2009/fusion: boost/fusion/algorithm/iteration boost/fusion/algorithm/iteration/detail boost/fusion/algorithm/query boost/fusion/algorithm/query/detail boost/fusion/algorithm/transformation boost/fusion/algorithm/transformation/detail boost/fusion/algorithm/transformation/detail/variadic_templates boost/fusion/container boost/fusion/container/detail boost/fusion/container/detail/pp boost/fusion/container/detail/variadic_templates boost/fusion/container/generation boost/fusion/container/generation/detail boost/fusion/container/generation/detail/pp boost/fusion/container/generation/detail/variadic_templates boost/fusion/container/list boost/fusion/container/list/detail/list boost/fusion/container/list/detail/list/pp boost/fusion/container/list/detail/list/variadic_templates boost/fusion/container/map boost/fusion/container/map/detail boost/fusion/container/map/detail/pp boost/fusion/container/map/detail/variadic_templates boost/fusion/container/set boost/fusion/container/set/detail boost/fusion/container/set/detail/pp boost/fusion/container/set/detail/variadic_templates boost/fusion/container/vector boost/fusion/container/vector/detail boost/fusion/container/vector/detail/pp boost/fusion/container/vector/detail/variadic_templates boost/fusion/functional/adapter/detail/decltype_and_variadic_templates boost/fusion/functional/generation/detail boost/fusion/functional/invocation/detail boost/fusion/sequence/intrinsic boost/fusion/support boost/fusion/support/detail boost/fusion/support/variadic_templates boost/fusion/support/variadic_templates/detail boost/fusion/tuple boost/fusion/tuple/detail/pp boost/fusion/tuple/detail/variadic_templates boost/fusion/view/detail boost/fusion/view/filter_view boost/fusion/view/iterator_range boost/fusion/view/joint_view boost/fusion/view/reverse_view boost/fusion/view/single_view boost/fusion/view/transform_view boost/fusion/view/transform_view/detail boost/fusion/view/zip_view boost/fusion/view/zip_view/detail libs/fusion/test libs/fusion/test/algorithm libs/fusion/test/sequence
From: mr.chr.schmidt_at_[hidden]
Date: 2009-07-30 14:42:58
Author: cschmidt
Date: 2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
New Revision: 55187
URL: http://svn.boost.org/trac/boost/changeset/55187
Log:
bugfixes
Added:
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/convert_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/as_seq.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/make_seq.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/seq_tie.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_seq.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/seq_tie.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp   (contents, props changed)
Removed:
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/list_tie.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_list.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_set.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_vector.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/vector_tie.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/list_tie.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_list.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_set.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_vector.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/vector_tie.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/convert_impl.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/pp/
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/variadic_templates/
   sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/convert_impl.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/pp/as_map.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/variadic_templates/
   sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/convert_impl.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/as_set.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/variadic_templates/
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/convert_impl.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/as_vector.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_forward_ctor.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/as_vector_impl.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_impl.hpp
   sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/make_tuple.hpp
   sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/tuple_tie.hpp
   sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/variadic_templates/
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/apply_transform_result.hpp
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp                                         |    17 +++-                                    
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/detail/fold.hpp                                        |    25 ++++--                                  
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/detail/for_each.hpp                                    |    10 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp                                               |    24 ++++-                                   
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp                                           |    16 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp                                                    |    16 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp                                                    |    17 +++-                                    
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp                                                  |    13 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp                                               |    20 +++-                                    
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp                                             |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp                                           |    10 +                                       
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/find_if.hpp                                         |    13 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp                                                   |    20 +++-                                    
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp                                                |    28 ++++--                                  
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp                                                   |    11 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp                                         |     9 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/replace_if.hpp                             |    94 +++++++++--------------                 
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp                 |     6                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp                                         |    44 +++++++++-                              
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp                                     |    19 +++-                                    
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp                                        |    15 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp                                     |    15 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp                                        |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp                                  |    84 ++++++++++++--------                    
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp                                          |    45 +++++++----                             
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp                                      |    18 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp                                     |    17 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp                                     |    21 ++++-                                   
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp                                    |    26 ++++--                                  
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp                                        |    15 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp                                     |    15 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp                                       |    28 +-----                                  
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp                                    |    26 ++++-                                   
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp                                       |    15 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp                                     |    73 ++++++++++++------                      
   sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp                                                   |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp                                |   135 ++++++++++++++++-----------------       
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp                                 |   141 ++++++++++++++++-------------------     
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp                 |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/list_tie.hpp                                          |    13 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_list.hpp                                         |    13 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_set.hpp                                          |    13 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_vector.hpp                                       |    13 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/map_tie.hpp                                           |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/pair_tie.hpp                                          |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/vector_tie.hpp                                        |    13 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp                                                    |    64 +++++++++-------                        
   sandbox/SOC/2009/fusion/boost/fusion/container/list/convert.hpp                                                 |    37 +-------                                
   sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp                                                    |    20 ++--                                    
   sandbox/SOC/2009/fusion/boost/fusion/container/map/convert.hpp                                                  |    37 +-------                                
   sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp                                                      |    28 +++---                                  
   sandbox/SOC/2009/fusion/boost/fusion/container/set/convert.hpp                                                  |    37 +-------                                
   sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/set_forward_ctor.hpp                               |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp                                                      |    23 ++---                                   
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/convert.hpp                                               |    36 +-------                                
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp                                    |    67 ++++++++++++----                        
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp                                                |   136 +--------------------------------       
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector10.hpp                                              |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector20.hpp                                              |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector30.hpp                                              |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector40.hpp                                              |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector50.hpp                                              |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/decltype_and_variadic_templates/unfused_impl.hpp |    10 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp                          |     6                                         
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp                                  |     6                                         
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp                                                  |    28 +++++-                                  
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp                                              |     9 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp                                                |     9 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp                                               |    15 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp                                                 |     9 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp                                               |     8 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp                                                |    10 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/support/deduce.hpp                                                         |    40 +++++++++                               
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/as_fusion_element.hpp                                       |     6                                         
   sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp                                                           |    45 +++++------                             
   sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp                                                            |    38 +++++----                               
   sandbox/SOC/2009/fusion/boost/fusion/support/result_of.hpp                                                      |    48 +++++++++--                             
   sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp                                                |    37 +--------                               
   sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp                                                       |    50 +++++++++++-                            
   sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/detail/variadic_arguments_to_vector_n.hpp       |    10 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_arguments_to_vector.hpp                |    10 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/tuple_expand.hpp                                           |    13 ---                                     
   sandbox/SOC/2009/fusion/boost/fusion/tuple/make_tuple.hpp                                                       |    13 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp                                                            |    43 ++++++++--                              
   sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple_tie.hpp                                                        |    16 ++--                                    
   sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp                                               |    43 +++++-----                              
   sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp                                           |    15 ++-                                     
   sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp                                     |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp                                             |    26 ++++--                                  
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp                                         |    15 ++-                                     
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp                                           |    52 ++++++-------                           
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp                                     |    27 ++----                                  
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp                                  |    33 +++-----                                
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/transform_view_iterator.hpp                     |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/value_at_impl.hpp                               |    24 ++---                                   
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/value_of_impl.hpp                               |    27 ++----                                  
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp                                     |    63 +++++++++------                         
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp                                        |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp                                          |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/value_at_impl.hpp                                     |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp                                                 |     7 +                                       
   sandbox/SOC/2009/fusion/libs/fusion/test/Jamfile                                                                |   158 ++++++++++++++++++++--------------------
   sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/find_if.cpp                                                  |     5                                         
   sandbox/SOC/2009/fusion/libs/fusion/test/sequence/misc.hpp                                                      |     2                                         
   104 files changed, 1474 insertions(+), 1220 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -25,19 +25,28 @@
 
     template <typename Seq, typename State, typename F>
     inline typename result_of::accumulate<
-        BOOST_FUSION_R_ELSE_LREF(Seq)
+        BOOST_FUSION_R_ELSE_CLREF(Seq)
       , BOOST_FUSION_R_ELSE_CLREF(State)
-      , BOOST_FUSION_R_ELSE_LREF(F)
+      , BOOST_FUSION_R_ELSE_CLREF(F)
     >::type
-    accumulate(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
+    accumulate(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
             BOOST_FUSION_R_ELSE_CLREF(State) state,
-            BOOST_FUSION_R_ELSE_LREF(F) f)
+            BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return fusion::fold(
                 BOOST_FUSION_FORWARD(Seq,seq),
                 BOOST_FUSION_FORWARD(State,state),
                 BOOST_FUSION_FORWARD(F,f));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename State, typename F>
+    inline typename result_of::accumulate<Seq&, State const&, F const&>::type
+    accumulate(Seq& seq,State const& state,F const& f)
+    {
+        return fusion::fold(seq,state,f);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/detail/fold.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/detail/fold.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/detail/fold.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -33,7 +33,7 @@
         static Result
         call(It0 const& it0,
                 BOOST_FUSION_R_ELSE_CLREF(State) state,
-                BOOST_FUSION_R_ELSE_LREF(F) f)
+                BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             typedef typename result_of::next<It0 const&>::type It1;
             It1 it1 = fusion::next(it0);
@@ -64,7 +64,7 @@
         static Result
         call(It0 const& it0,
                 BOOST_FUSION_R_ELSE_CLREF(State) state,
-                BOOST_FUSION_R_ELSE_LREF(F) f)
+                BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             typedef typename result_of::next<It0 const&>::type It1;
             It1 it1 = fusion::next(it0);
@@ -89,7 +89,7 @@
         static Result
         call(It0 const& it0,
                 BOOST_FUSION_R_ELSE_CLREF(State) state,
-                BOOST_FUSION_R_ELSE_LREF(F) f)
+                BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             return f(fusion::deref(fusion::next(it0)),
                     f(fusion::deref(it0),
@@ -104,7 +104,7 @@
         static Result
         call(It0 const& it0,
                 BOOST_FUSION_R_ELSE_CLREF(State) state,
-                BOOST_FUSION_R_ELSE_LREF(F) f)
+                BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             return f(fusion::deref(it0), BOOST_FUSION_FORWARD(State,state));
         }
@@ -117,7 +117,7 @@
         static Result
         call(It0 const&,
                 BOOST_FUSION_R_ELSE_CLREF(State) state,
-                BOOST_FUSION_R_ELSE_LREF(F))
+                BOOST_FUSION_R_ELSE_CLREF(F))
         {
             return state;
         }
@@ -130,14 +130,23 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
         typedef typename
-            support::result_of<FRef(deref_type, StateRef)>::type
+            support::result_of<
+                typename support::get_func_base<FRef>::type
+                (deref_type, StateRef)
+            >::type
         type;
 #else
         typedef typename
             mpl::eval_if<
                 typename detail::is_lrref<deref_type>::type
-              , support::result_of<FRef(deref_type, StateRef)>
-              , support::result_of<FRef(deref_type&&, StateRef)>
+              , support::result_of<
+                    typename support::get_func_base<FRef>::type
+                    (deref_type, StateRef)
+                >
+              , support::result_of<
+                    typename support::get_func_base<FRef>::type
+                    (deref_type&&, StateRef)
+                >
             >::type
         type;
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/detail/for_each.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/detail/for_each.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/detail/for_each.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -24,7 +24,7 @@
     struct for_each_unrolled
     {
         template<typename It0, typename F>
-        static void call(It0 const& it0, BOOST_FUSION_R_ELSE_LREF(F) f)
+        static void call(It0 const& it0, BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             typedef typename result_of::next<It0 const&>::type It1;
             It1 it1(fusion::next(it0));
@@ -48,7 +48,7 @@
     struct for_each_unrolled<3>
     {
         template<typename It0, typename F>
-        static void call(It0 const& it0, BOOST_FUSION_R_ELSE_LREF(F) f)
+        static void call(It0 const& it0, BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             typedef typename result_of::next<It0 const&>::type It1;
             It1 it1(fusion::next(it0));
@@ -65,7 +65,7 @@
     struct for_each_unrolled<2>
     {
         template<typename It0, typename F>
-        static void call(It0 const& it0, BOOST_FUSION_R_ELSE_LREF(F) f)
+        static void call(It0 const& it0, BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             typedef typename result_of::next<It0 const&>::type It1;
             It1 it1(fusion::next(it0));
@@ -79,7 +79,7 @@
     struct for_each_unrolled<1>
     {
         template<typename It0, typename F>
-        static void call(It0 const& it0, BOOST_FUSION_R_ELSE_LREF(F) f)
+        static void call(It0 const& it0, BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             f(fusion::deref(it0));
         }
@@ -89,7 +89,7 @@
     struct for_each_unrolled<0>
     {
         template<typename It, typename F>
-        static void call(It const&, BOOST_FUSION_R_ELSE_LREF(F))
+        static void call(It const&, BOOST_FUSION_R_ELSE_CLREF(F))
         {
         }
     };
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -41,21 +41,33 @@
     template <typename Seq, typename State, typename F>
     inline typename
         result_of::fold<
-            BOOST_FUSION_R_ELSE_LREF(Seq)
+            BOOST_FUSION_R_ELSE_CLREF(Seq)
           , BOOST_FUSION_R_ELSE_CLREF(State)
-          , BOOST_FUSION_R_ELSE_LREF(F)
+          , BOOST_FUSION_R_ELSE_CLREF(F)
         >::type
-    fold(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
+    fold(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
          BOOST_FUSION_R_ELSE_CLREF(State) state,
-         BOOST_FUSION_R_ELSE_LREF(F) f)
+         BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return
             result_of::fold<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
               , BOOST_FUSION_R_ELSE_CLREF(State)
-              , BOOST_FUSION_R_ELSE_LREF(F)
+              , BOOST_FUSION_R_ELSE_CLREF(F)
             >::gen::call(fusion::begin(seq), state, f);
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename State, typename F>
+    inline typename result_of::fold<Seq&,State const&,F const&>::type
+    fold(Seq& seq,
+         State const& state,
+         F const& f)
+    {
+        return result_of::fold<Seq&,State const&,F const&>::gen::call(
+                fusion::begin(seq), state, f);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -29,14 +29,24 @@
 
     template <typename Seq, typename F>
     inline void
-    for_each(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
-             BOOST_FUSION_R_ELSE_LREF(F) f)
+    for_each(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
+             BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         detail::for_each_unrolled<
-            result_of::size<BOOST_FUSION_R_ELSE_LREF(Seq)>::value
+            result_of::size<BOOST_FUSION_R_ELSE_CLREF(Seq)>::value
         >::call(fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)),
                 BOOST_FUSION_FORWARD(F,f));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename F>
+    inline void
+    for_each(Seq& seq,F const& f)
+    {
+        detail::for_each_unrolled<result_of::size<Seq&>::value>::call(
+                fusion::begin(seq),f);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -28,15 +28,27 @@
 
     template <typename Seq, typename F>
     inline bool
-    all(BOOST_FUSION_R_ELSE_LREF(Seq) seq, BOOST_FUSION_R_ELSE_LREF(F) f)
+    all(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return
             detail::unrolled_all<
-                result_of::size<BOOST_FUSION_R_ELSE_LREF(Seq)>::value
+                result_of::size<BOOST_FUSION_R_ELSE_CLREF(Seq)>::value
             >::call(
                     fusion::begin(BOOST_FUSION_FORWARD(Seq,seq))
                   , BOOST_FUSION_FORWARD(F,f));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename F>
+    inline bool
+    all(Seq& seq, F const& f)
+    {
+        return
+            detail::unrolled_all<
+                result_of::size<Seq const&>::value
+            >::call(fusion::begin(seq), f);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -28,7 +28,7 @@
 
             template<typename E>
             inline bool
-            operator()(BOOST_FUSION_R_ELSE_LREF(E) e)
+            operator()(BOOST_FUSION_R_ELSE_CLREF(E) e)const
             {
                 return !f(BOOST_FUSION_FORWARD(E,e));
             }
@@ -48,12 +48,21 @@
 
     template <typename Seq, typename F>
     inline bool
-    any(BOOST_FUSION_R_ELSE_LREF(Seq) seq, BOOST_FUSION_R_ELSE_LREF(F) f)
+    any(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
-        return !all(
+        return !fusion::all(
                 BOOST_FUSION_FORWARD(Seq,seq),
-                detail::any_helper<BOOST_FUSION_R_ELSE_LREF(F)>(f));
+                detail::any_helper<BOOST_FUSION_R_ELSE_CLREF(F)>(f));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename F>
+    inline bool
+    any(Seq& seq, F const& f)
+    {
+        return !fusion::all(seq,detail::any_helper<F const&>(f));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -27,12 +27,21 @@
 
     template <typename Seq, typename T>
     inline int
-    count(BOOST_FUSION_R_ELSE_LREF(Seq) seq, BOOST_FUSION_R_ELSE_LREF(T) x)
+    count(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(T) x)
     {
         return fusion::count_if(
                 BOOST_FUSION_FORWARD(Seq,seq),
-                detail::count_helper<BOOST_FUSION_R_ELSE_LREF(T)>(x));
+                detail::count_helper<BOOST_FUSION_R_ELSE_CLREF(T)>(x));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename T>
+    inline int
+    count(Seq& seq, T const& x)
+    {
+        return fusion::count_if(seq,detail::count_helper<T const&>(x));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -27,7 +27,7 @@
 
             template<typename E>
             inline int
-            operator()(BOOST_FUSION_R_ELSE_LREF(E) e, int count)
+            operator()(BOOST_FUSION_R_ELSE_CLREF(E) e, int count)const
             {
                 return f(BOOST_FUSION_FORWARD(E,e)) ? ++count : count;
             }
@@ -47,13 +47,23 @@
 
     template <typename Seq, typename F>
     inline int
-    count_if(BOOST_FUSION_R_ELSE_LREF(Seq) seq, BOOST_FUSION_R_ELSE_LREF(F) f)
+    count_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
-        return fold(
-            BOOST_FUSION_FORWARD(Seq,seq),
+        return fold(BOOST_FUSION_FORWARD(Seq,seq),
             0,
-            detail::count_if_helper<BOOST_FUSION_R_ELSE_LREF(F)>(f));
+            detail::count_if_helper<BOOST_FUSION_R_ELSE_CLREF(F)>(f));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename F>
+    inline int
+    count_if(Seq& seq, F const& f)
+    {
+        return fold(seq,
+            0,
+            detail::count_if_helper<F const&>(f));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -23,7 +23,7 @@
     {
         template <typename It0, typename F>
         static bool
-        call(It0 const& it0, BOOST_FUSION_R_ELSE_LREF(F) f)
+        call(It0 const& it0, BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             if(!f(fusion::deref(it0)))
             {
@@ -62,7 +62,7 @@
     {
         template <typename It0, typename F>
         static bool
-        call(It0 const& it0, BOOST_FUSION_R_ELSE_LREF(F) f)
+        call(It0 const& it0, BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             if(!f(fusion::deref(it0)))
             {
@@ -87,7 +87,7 @@
     {
         template <typename It0, typename F>
         static bool
-        call(It0 const& it0, BOOST_FUSION_R_ELSE_LREF(F) f)
+        call(It0 const& it0, BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             if(!f(fusion::deref(it0)))
             {
@@ -105,7 +105,7 @@
     {
         template <typename It0, typename F>
         static bool
-        call(It0 const& it0, BOOST_FUSION_R_ELSE_LREF(F) f)
+        call(It0 const& it0, BOOST_FUSION_R_ELSE_CLREF(F) f)
         {
             return f(fusion::deref(it0));
         }
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -21,7 +21,7 @@
     {
         template <typename T1, typename T2>
         static bool
-        call(BOOST_FUSION_R_ELSE_LREF(T1) x, BOOST_FUSION_R_ELSE_LREF(T2) y)
+        call(BOOST_FUSION_R_ELSE_CLREF(T1) x, BOOST_FUSION_R_ELSE_CLREF(T2) y)
         {
             return BOOST_FUSION_FORWARD(T1,x) == BOOST_FUSION_FORWARD(T2,y);
         }
@@ -33,7 +33,7 @@
     {
         template <typename T1, typename T2>
         static bool
-        call(BOOST_FUSION_R_ELSE_LREF(T1), BOOST_FUSION_R_ELSE_LREF(T2))
+        call(BOOST_FUSION_R_ELSE_CLREF(T1), BOOST_FUSION_R_ELSE_CLREF(T2))
         {
             return false;
         }
@@ -48,10 +48,14 @@
 
         template <typename T2>
         bool
-        operator()(BOOST_FUSION_R_ELSE_LREF(T2) y)
+        operator()(BOOST_FUSION_R_ELSE_CLREF(T2) y)const
         {
             typedef typename remove_reference<T1Ref>::type T1_nonref;
+#ifdef BOOST_NO_RVALUE_REFERENCES
+            typedef T2 T2_nonref;
+#else
             typedef typename remove_reference<T2>::type T2_nonref;
+#endif
 
             typedef
                 compare_convertible<
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/find_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/find_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/find_if.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -212,8 +212,10 @@
             static type
             call(It const& it)
             {
-                typedef typename result_of::distance<It, type>::type N;
-                return fusion::advance<N>(it);
+                return
+                    fusion::advance<
+                        typename result_of::distance<It, type>::type
+                    >(it);
             }
         };
 
@@ -223,11 +225,10 @@
         {
             template <typename Seq>
             static typename static_find_if<First, Last, Pred>::type
-            call(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+            call(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
             {
-                typedef static_find_if<First, Last, Pred> gen;
-
-                return gen::call(fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
+                return static_find_if<First, Last, Pred>::call(
+                        fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
             }
         };
     }
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -24,8 +24,7 @@
         template<
             typename Seq
           , typename T
-          , bool is_associative_sequence=
-                traits::is_associative<Seq>::value
+          , bool is_associative_sequence=traits::is_associative<Seq>::value
         >
         struct find;
 
@@ -59,12 +58,21 @@
         result_of::find<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type const
     find(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
-        typedef typename
-            result_of::find<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::filter
-        gen;
+        return
+            result_of::find<
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
+              , T
+            >::filter::call(seq);
+    }
 
-        return gen::call(seq);
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename T, typename Seq>
+    inline typename result_of::find<Seq&, T>::type const
+    find(Seq& seq)
+    {
+        return result_of::find<Seq&, T>::filter::call(seq);
     }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -21,13 +21,15 @@
         template <typename Seq, typename Pred>
         struct find_if
         {
-            typedef typename
+            typedef
                 detail::static_find_if<
                     typename result_of::begin<Seq>::type
                   , typename result_of::end<Seq>::type
                   , Pred
-                >::type
-            type;
+                >
+            gen;
+
+            typedef typename gen::type type;
         };
     }
 
@@ -36,16 +38,20 @@
         result_of::find_if<BOOST_FUSION_R_ELSE_CLREF(Seq), Pred>::type
     find_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
-        typedef
-            detail::static_find_if<
-                typename result_of::begin<Seq>::type
-              , typename result_of::end<Seq>::type
-              , Pred
-            >
-        gen;
+        return
+            result_of::find_if<
+                BOOST_FUSION_R_ELSE_CLREF(Seq), Pred
+            >::gen::call(fusion::begin(seq));
+    }
 
-        return gen::call(fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Pred, typename Seq>
+    inline typename result_of::find_if<Seq&, Pred>::type
+    find_if(Seq& seq)
+    {
+        return result_of::find_if<Seq&, Pred>::gen::call(fusion::begin(seq));
     }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -24,12 +24,21 @@
 
     template <typename Seq, typename F>
     inline bool
-    none(BOOST_FUSION_R_ELSE_LREF(Seq) seq, BOOST_FUSION_R_ELSE_LREF(F) f)
+    none(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return !fusion::any(
                 BOOST_FUSION_FORWARD(Seq,seq),
                 BOOST_FUSION_FORWARD(F,f));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename F>
+    inline bool
+    none(Seq& seq, F const& f)
+    {
+        return !fusion::any(seq,f);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -23,7 +23,7 @@
         struct clear
         {
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
-            typedef vector0 type;
+            typedef vector0<> type;
 #else
             typedef vector<> type;
 #endif
@@ -31,10 +31,11 @@
     }
 
     template <typename Seq>
-    inline typename result_of::clear<BOOST_FUSION_R_ELSE_LREF(Seq)>::type
-    clear(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+    inline typename result_of::clear<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
+    clear(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
-        return typename result_of::clear<BOOST_FUSION_R_ELSE_LREF(Seq)>::type();
+        return typename
+            result_of::clear<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type();
     }
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/replace_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/replace_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/replace_if.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -10,41 +10,15 @@
 
 #include <boost/fusion/support/result_of.hpp>
 
+#include <boost/mpl/bool.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
     //TODO cschmidt: update doc. according to real behavior!
-    template <bool is_convertible>
-    struct replacer_if_helper;
-
-    template <>
-    struct replacer_if_helper<false>
-    {
-        template <typename U, typename F, typename NewValue>
-        static BOOST_FUSION_R_ELSE_LREF(U)
-        call(BOOST_FUSION_R_ELSE_LREF(U) x,
-             BOOST_FUSION_R_ELSE_LREF(F),
-             BOOST_FUSION_R_ELSE_LREF(NewValue))
-        {
-            return x;
-        }
-    };
-
-    template <>
-    struct replacer_if_helper<true>
-    {
-        template <typename U, typename F, typename NewValue>
-        static typename remove_reference<U>::type
-        call(BOOST_FUSION_R_ELSE_LREF(U) x,
-             BOOST_FUSION_R_ELSE_LREF(F) f,
-             BOOST_FUSION_R_ELSE_LREF(NewValue) new_value)
-        {
-            return f(BOOST_FUSION_FORWARD(U,x)) ? new_value : x;
-        }
-    };
-
+    //TODO cschmidt: conv based on ptrs?!
+    //TODO const?!
     template <typename F, typename NewValue>
     struct replace_if_helper
     {
@@ -54,35 +28,30 @@
         template<typename Self, typename U>
         struct result<Self(U)>
         {
+            typedef typename detail::identity<U>::type u;
+
             typedef typename
-                mpl::if_<
-                    is_convertible<
-                        NewValue
-                      , typename remove_reference<U>::type
-                    >
-                  , NewValue
-                  , U
-                >::type
+                mpl::if_<is_convertible<NewValue, u>, u, U>::type
             type;
         };
 
         template<typename OtherF, typename OtherNewValue>
         replace_if_helper(
-                BOOST_FUSION_R_ELSE_LREF(OtherF) other_f,
-                BOOST_FUSION_R_ELSE_LREF(OtherNewValue) other_new_value)
-          : f(BOOST_FUSION_FORWARD(OtherF,other_f))
-          , new_value(BOOST_FUSION_FORWARD(OtherNewValue,other_new_value))
+            BOOST_FUSION_R_ELSE_CLREF(OtherF) f,
+            BOOST_FUSION_R_ELSE_CLREF(OtherNewValue) new_value)
+          : f(BOOST_FUSION_FORWARD(OtherF,f))
+          , new_value(BOOST_FUSION_FORWARD(OtherNewValue,new_value))
         {}
 
         template<typename Replacer>
-        replace_if_helper(BOOST_FUSION_R_ELSE_LREF(Replacer) replacer)
+        replace_if_helper(BOOST_FUSION_R_ELSE_CLREF(Replacer) replacer)
           : f(BOOST_FUSION_FORWARD(Replacer,replacer).f)
           , new_value(BOOST_FUSION_FORWARD(Replacer,replacer).new_value)
         {}
 
         template<typename Replacer>
         replace_if_helper&
-        operator=(BOOST_FUSION_R_ELSE_LREF(Replacer) replacer)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(Replacer) replacer)
         {
             f=BOOST_FUSION_FORWARD(Replacer,replacer).f;
             new_value=BOOST_FUSION_FORWARD(Replacer,replacer).new_value;
@@ -90,22 +59,33 @@
         }
 
         template <typename U>
-        typename result<replace_if_helper(U)>::type
+        BOOST_FUSION_R_ELSE_LREF(U)
+        call_impl(BOOST_FUSION_R_ELSE_LREF(U) x, mpl::false_) const
+        {
+            return x;
+        }
+
+        template <typename U>
+        typename result<replace_if_helper(BOOST_FUSION_R_ELSE_LREF(U))>::type
+        call_impl(BOOST_FUSION_R_ELSE_LREF(U) x, mpl::true_) const
+        {
+            return f(BOOST_FUSION_FORWARD(U,x)) ? new_value : x;
+        }
+
+        template <typename U>
+        typename result<replace_if_helper(BOOST_FUSION_R_ELSE_LREF(U))>::type
         operator()(BOOST_FUSION_R_ELSE_LREF(U) x) const
         {
-            typedef
-                replacer_if_helper<
-                    is_convertible<
-                        NewValue
-                      , typename remove_reference<U>::type
-                    >::value
-                >
-            gen;
-
-            return gen::call(
-                    BOOST_FUSION_FORWARD(U, x),
-                    f,
-                    new_value);
+            return call_impl(
+                BOOST_FUSION_FORWARD(U, x),
+                typename is_convertible<
+                    NewValue
+#ifdef BOOST_NO_RVALUE_REFERENCES
+                  , U
+#else
+                  , typename detail::remove_reference<U>::type
+#endif
+                >::type());
         }
 
         F f;
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -27,11 +27,11 @@
     }
 
     template<typename... Seqs>
-    inline typename result_of::zip<BOOST_FUSION_R_ELSE_LREF(Seqs)...>::type
-    zip(BOOST_FUSION_R_ELSE_LREF(Seqs)... seqs)
+    inline typename result_of::zip<BOOST_FUSION_R_ELSE_CLREF(Seqs)...>::type
+    zip(BOOST_FUSION_R_ELSE_CLREF(Seqs)... seqs)
     {
         return typename
-            result_of::zip<BOOST_FUSION_R_ELSE_LREF(Seqs)...>::type(
+            result_of::zip<BOOST_FUSION_R_ELSE_CLREF(Seqs)...>::type(
                     vector_tie(seqs...));
     }
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -98,17 +98,17 @@
 
     template <typename Seq, typename First, typename Last>
     typename result_of::erase<
-        BOOST_FUSION_R_ELSE_LREF(Seq)
+        BOOST_FUSION_R_ELSE_CLREF(Seq)
       , First const&
       , Last const&
     >::type
-    erase(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
+    erase(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
             First const& first,
             Last const& last)
     {
         typedef
             result_of::erase<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
               , First const&
               , Last const&
             >
@@ -129,17 +129,49 @@
     }
 
     template <typename Seq, typename First>
-    typename result_of::erase<BOOST_FUSION_R_ELSE_LREF(Seq), First const&>::type
-    erase(BOOST_FUSION_R_ELSE_LREF(Seq) seq, First const& first)
+    typename result_of::erase<BOOST_FUSION_R_ELSE_CLREF(Seq), First const&>::type
+    erase(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, First const& first)
     {
         return erase(
                 BOOST_FUSION_FORWARD(Seq,seq)
               , first
               , detail::compute_erase_last<
-                    BOOST_FUSION_R_ELSE_LREF(Seq)
+                    BOOST_FUSION_R_ELSE_CLREF(Seq)
                   , First const&
                 >::call(first));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename First, typename Last>
+    typename result_of::erase<Seq&, First const&, Last const&>::type
+    erase(Seq& seq,First const& first,Last const& last)
+    {
+        typedef result_of::erase<Seq&, First const&, Last const&> result;
+        typedef typename result::left_type left_type;
+        typedef typename result::right_type right_type;
+        typedef typename result::type result_type;
+
+        return result_type(
+                left_type(
+                    fusion::begin(seq)
+                  , first
+                )
+              , right_type(
+                    last
+                  , fusion::end(seq)
+                ));
+    }
+
+    template <typename Seq, typename First>
+    typename result_of::erase<Seq&, First const&>::type
+    erase(Seq& seq, First const& first)
+    {
+        return erase(
+                seq
+              , first
+              , detail::compute_erase_last<Seq&, First const&>::call(first));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -37,13 +37,24 @@
 
     template <typename Key, typename Seq>
     inline typename
-        result_of::erase_key<BOOST_FUSION_R_ELSE_LREF(Seq), Key>::type
-    erase_key(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+        result_of::erase_key<BOOST_FUSION_R_ELSE_CLREF(Seq), Key>::type
+    erase_key(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
-        typedef result_of::erase_key<BOOST_FUSION_R_ELSE_LREF(Seq), Key> result;
+        return erase(
+                BOOST_FUSION_FORWARD(Seq,seq),
+                result_of::erase_key<
+                    BOOST_FUSION_R_ELSE_CLREF(Seq), Key
+                >::gen::call(seq));
+    }
 
-        return erase(BOOST_FUSION_FORWARD(Seq,seq), result::gen::call(seq));
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Key, typename Seq>
+    inline typename result_of::erase_key<Seq&, Key>::type
+    erase_key(Seq& seq)
+    {
+        return erase(seq,result_of::erase_key<Seq, Key>::gen::call(seq));
     }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -27,13 +27,22 @@
     }
 
     template <typename T, typename Seq>
-    inline typename result_of::filter<BOOST_FUSION_R_ELSE_LREF(Seq), T>::type
-    filter(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+    inline typename result_of::filter<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type
+    filter(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
         return typename
-            result_of::filter<BOOST_FUSION_R_ELSE_LREF(Seq), T>::type(
+            result_of::filter<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type(
                 BOOST_FUSION_FORWARD(Seq,seq));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename T, typename Seq>
+    inline typename result_of::filter<Seq&, T>::type
+    filter(Seq& seq)
+    {
+        return typename result_of::filter<Seq&, T>::type(seq);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -23,13 +23,22 @@
     
     template <typename Pred, typename Seq>
     inline typename
-        result_of::filter_if<BOOST_FUSION_R_ELSE_LREF(Seq), Pred>::type
-    filter_if(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+        result_of::filter_if<BOOST_FUSION_R_ELSE_CLREF(Seq), Pred>::type
+    filter_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
         return typename
-            result_of::filter_if<BOOST_FUSION_R_ELSE_LREF(Seq), Pred>::type(
+            result_of::filter_if<BOOST_FUSION_R_ELSE_CLREF(Seq), Pred>::type(
                 BOOST_FUSION_FORWARD(Seq,seq));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Pred, typename Seq>
+    inline typename result_of::filter_if<Seq&, Pred>::type
+    filter_if(Seq& seq)
+    {
+        return typename result_of::filter_if<Seq&, Pred>::type(seq);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -30,18 +30,18 @@
     template <typename Seq, typename Pos, typename T>
     inline typename
         result_of::insert<
-            BOOST_FUSION_R_ELSE_LREF(Seq)
+            BOOST_FUSION_R_ELSE_CLREF(Seq)
           , Pos const&
-          , BOOST_FUSION_R_ELSE_LREF(T)
+          , BOOST_FUSION_R_ELSE_CLREF(T)
         >::type
-    insert(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
+    insert(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
             Pos const& pos,
-            BOOST_FUSION_R_ELSE_LREF(T) x)
+            BOOST_FUSION_R_ELSE_CLREF(T) x)
     {
         return insert_range(
                   BOOST_FUSION_FORWARD(Seq,seq)
                 , pos
-                , make_single_view(BOOST_FUSION_FORWARD(T,x)));
+                , fusion::make_single_view(BOOST_FUSION_FORWARD(T,x)));
     }
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
@@ -49,7 +49,7 @@
     inline typename result_of::insert<Seq&, Pos const&, T const&>::type
     insert(Seq& seq,Pos const& pos,T const& x)
     {
-        return insert_range(seq, pos, make_single_view(x));
+        return insert_range(seq, pos, fusion::make_single_view(x));
     }
 #endif
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -15,6 +15,8 @@
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
 #include <boost/fusion/support/ref.hpp>
 
+#include <boost/preprocessor/empty.hpp>
+
 namespace boost { namespace fusion
 {
     namespace result_of
@@ -45,42 +47,54 @@
         };
     }
 
-    template <typename Seq, typename Pos, typename Range>
-    inline typename
-        result_of::insert_range<
-            BOOST_FUSION_R_ELSE_LREF(Seq)
-          , Pos const&
-          , BOOST_FUSION_R_ELSE_LREF(Range)
-        >::type
-    insert_range(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
-            Pos const& pos,
-            BOOST_FUSION_R_ELSE_LREF(Range) range)
-    {
-        typedef
-            result_of::insert_range<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
-              , Pos const&
-              , BOOST_FUSION_R_ELSE_LREF(Range)
-            >
-        result;
-        typedef typename result::left_type left_type;
-        typedef typename result::right_type right_type;
-        typedef typename result::left_insert_type left_insert_type;
-
-        return typename result::type(
-                left_insert_type(
-                    left_type(
-                        fusion::begin(seq),
-                        pos
-                    ),
-                    BOOST_FUSION_FORWARD(Range,range)
-                ),
-                right_type(
-                    pos,
-                    fusion::end(seq)
-                )
-               );
+#define BOOST_FUSION_INSERT_RANGE(SEQ_CV_REF_MODIFIER,RANGE_CV_REF_MODIFIER)\
+    template <typename Seq, typename Pos, typename Range>\
+    inline typename\
+        result_of::insert_range<\
+            Seq SEQ_CV_REF_MODIFIER\
+          , Pos const&\
+          , Range RANGE_CV_REF_MODIFIER\
+        >::type\
+    insert_range(Seq SEQ_CV_REF_MODIFIER seq,\
+            Pos const& pos,\
+            Range RANGE_CV_REF_MODIFIER range)\
+    {\
+        typedef\
+            result_of::insert_range<\
+                Seq SEQ_CV_REF_MODIFIER\
+              , Pos const&\
+              , Range RANGE_CV_REF_MODIFIER\
+            >\
+        result;\
+        typedef typename result::left_type left_type;\
+        typedef typename result::right_type right_type;\
+        typedef typename result::left_insert_type left_insert_type;\
+        \
+        return typename result::type(\
+                left_insert_type(\
+                    left_type(\
+                        fusion::begin(seq),\
+                        pos\
+                    ),\
+                    BOOST_FUSION_FORWARD(Range RANGE_CV_REF_MODIFIER,range)\
+                ),\
+                right_type(\
+                    pos,\
+                    fusion::end(seq)\
+                )\
+               );\
     }
+
+    BOOST_FUSION_INSERT_RANGE(
+            BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()),
+            BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()));
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    BOOST_FUSION_INSERT_RANGE(&,const&);
+    BOOST_FUSION_INSERT_RANGE(const&,&);
+    BOOST_FUSION_INSERT_RANGE(&,&);
+#endif
+
+#undef BOOST_FUSION_INSERT_RANGE
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -11,6 +11,8 @@
 
 #include <boost/fusion/view/joint_view.hpp>
 
+#include <boost/preprocessor/empty.hpp>
+
 namespace boost { namespace fusion {
 
     namespace result_of
@@ -22,23 +24,34 @@
         };
     }
 
-    template<typename Lhs, typename Rhs>
-    inline typename
-        result_of::join<
-            BOOST_FUSION_R_ELSE_LREF(Lhs)
-          , BOOST_FUSION_R_ELSE_LREF(Rhs)
-        >::type
-    join(BOOST_FUSION_R_ELSE_LREF(Lhs) lhs,
-            BOOST_FUSION_R_ELSE_LREF(Rhs) rhs)
-    {
-        return typename
-            result_of::join<
-                BOOST_FUSION_R_ELSE_LREF(Lhs)
-              , BOOST_FUSION_R_ELSE_LREF(Rhs)
-            >::type(
-                    BOOST_FUSION_FORWARD(Lhs,lhs)
-                  , BOOST_FUSION_FORWARD(Rhs,rhs));
+#define BOOST_FUSION_JOIN(LHS_CV_REF_MODIFIER,RHS_CV_REF_MODIFIER)\
+    template<typename Lhs, typename Rhs>\
+    inline typename\
+        result_of::join<\
+            Lhs LHS_CV_REF_MODIFIER\
+          , Rhs RHS_CV_REF_MODIFIER\
+        >::type\
+    join(Lhs LHS_CV_REF_MODIFIER lhs,\
+            Rhs RHS_CV_REF_MODIFIER rhs)\
+    {\
+        return typename\
+            result_of::join<\
+                Lhs LHS_CV_REF_MODIFIER\
+              , Rhs RHS_CV_REF_MODIFIER\
+            >::type(BOOST_FUSION_FORWARD(Lhs LHS_CV_REF_MODIFIER,lhs)\
+                  , BOOST_FUSION_FORWARD(Rhs RHS_CV_REF_MODIFIER,rhs));\
     }
+
+    BOOST_FUSION_JOIN(
+            BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()),
+            BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()));
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    BOOST_FUSION_JOIN(&,const&);
+    BOOST_FUSION_JOIN(const&,&);
+    BOOST_FUSION_JOIN(&,&);
+#endif
+
+#undef BOOST_FUSION_JOIN
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -30,14 +30,26 @@
     }
 
     template <typename Seq>
-    inline typename result_of::pop_back<BOOST_FUSION_R_ELSE_LREF(Seq)>::type
-    pop_back(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+    inline typename result_of::pop_back<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
+    pop_back(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
         return typename
-            result_of::pop_back<BOOST_FUSION_R_ELSE_LREF(Seq)>::type(
+            result_of::pop_back<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type(
                     fusion::begin(seq)
                   , fusion::prior(fusion::end(seq)));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq>
+    inline typename result_of::pop_back<Seq&>::type
+    pop_back(Seq& seq)
+    {
+        return typename
+            result_of::pop_back<Seq&>::type(
+                    fusion::begin(seq)
+                  , fusion::prior(fusion::end(seq)));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -30,14 +30,25 @@
     }
 
     template <typename Seq>
-    inline typename result_of::pop_front<BOOST_FUSION_R_ELSE_LREF(Seq)>::type
-    pop_front(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+    inline typename result_of::pop_front<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
+    pop_front(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
         return typename
             result_of::pop_front<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
             >::type(fusion::next(fusion::begin(seq)), fusion::end(seq));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq>
+    inline typename result_of::pop_front<Seq&>::type
+    pop_front(Seq& seq)
+    {
+        return typename
+            result_of::pop_front<Seq&>::type(
+                fusion::next(fusion::begin(seq)), fusion::end(seq));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,9 +8,9 @@
 #ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_PUSH_BACK_HPP
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_PUSH_BACK_HPP
 
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
 #include <boost/fusion/view/joint_view/joint_view.hpp>
 #include <boost/fusion/view/single_view/single_view.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
 
 namespace boost { namespace fusion
 {
@@ -31,17 +31,28 @@
     template <typename Seq, typename T>
     inline typename
         result_of::push_back<
-            BOOST_FUSION_R_ELSE_LREF(Seq)
+            BOOST_FUSION_R_ELSE_CLREF(Seq)
           , BOOST_FUSION_R_ELSE_CLREF(T)
         >::type
-    push_back(BOOST_FUSION_R_ELSE_LREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(T) x)
+    push_back(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(T) x)
     {
         return typename
             result_of::push_back<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
               , BOOST_FUSION_R_ELSE_CLREF(T)
-            >::type(BOOST_FUSION_FORWARD(Seq,seq), BOOST_FUSION_FORWARD(T,x));
+            >::type(BOOST_FUSION_FORWARD(Seq,seq),
+                  fusion::make_single_view(BOOST_FUSION_FORWARD(T,x)));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename T>
+    inline typename result_of::push_back<Seq&, T const&>::type
+    push_back(Seq& seq, T const& x)
+    {
+        return typename result_of::push_back<Seq&, T const&>::type(
+                seq,fusion::make_single_view(x));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,9 +8,9 @@
 #ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_PUSH_FRONT_HPP
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_PUSH_FRONT_HPP
 
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
 #include <boost/fusion/view/joint_view/joint_view.hpp>
 #include <boost/fusion/view/single_view/single_view.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
 
 namespace boost { namespace fusion
 {
@@ -21,9 +21,7 @@
         {
             typedef
                 joint_view<
-                    fusion::single_view<
-                        typename detail::as_fusion_element<T>::type
-                    >
+                    single_view<typename detail::as_fusion_element<T>::type>
                   , Seq
                 >
             type;
@@ -33,19 +31,31 @@
     template <typename Seq, typename T>
     inline typename
         result_of::push_front<
-            BOOST_FUSION_R_ELSE_LREF(Seq)
+            BOOST_FUSION_R_ELSE_CLREF(Seq)
           , BOOST_FUSION_R_ELSE_CLREF(T)
         >::type
     push_front(
-            BOOST_FUSION_R_ELSE_LREF(Seq) seq,
+            BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
             BOOST_FUSION_R_ELSE_CLREF(T) x)
     {
         return typename
             result_of::push_front<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
               , BOOST_FUSION_R_ELSE_CLREF(T)
-            >::type(BOOST_FUSION_FORWARD(T,x), BOOST_FUSION_FORWARD(Seq,seq));
+            >::type(fusion::make_single_view(BOOST_FUSION_FORWARD(T,x)),
+                    BOOST_FUSION_FORWARD(Seq,seq));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename T>
+    inline typename result_of::push_front<Seq&, T const&>::type
+    push_front(Seq& seq, T const& x)
+    {
+        return typename result_of::push_front<Seq&, T const&>::type(
+                fusion::make_single_view(BOOST_FUSION_FORWARD(T,x)),
+                BOOST_FUSION_FORWARD(Seq,seq));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -28,13 +28,22 @@
     }
 
     template <typename T, typename Seq>
-    inline typename result_of::remove<BOOST_FUSION_R_ELSE_LREF(Seq), T>::type
-    remove(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+    inline typename result_of::remove<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type
+    remove(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
         return typename
-            result_of::remove<BOOST_FUSION_R_ELSE_LREF(Seq), T>::type(
+            result_of::remove<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type(
                 BOOST_FUSION_FORWARD(Seq,seq));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename T, typename Seq>
+    inline typename result_of::remove<Seq&, T>::type
+    remove_if(Seq& seq)
+    {
+        return typename result_of::remove<Seq&, T>::type(seq);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -26,13 +26,22 @@
 
     template <typename Pred, typename Seq>
     inline typename
-        result_of::remove_if<BOOST_FUSION_R_ELSE_LREF(Seq), Pred>::type
-    remove_if(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+        result_of::remove_if<BOOST_FUSION_R_ELSE_CLREF(Seq), Pred>::type
+    remove_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
         return typename
-            result_of::remove_if<BOOST_FUSION_R_ELSE_LREF(Seq), Pred>::type(
+            result_of::remove_if<BOOST_FUSION_R_ELSE_CLREF(Seq), Pred>::type(
                 BOOST_FUSION_FORWARD(Seq,seq));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Pred, typename Seq>
+    inline typename result_of::remove_if<Seq&, Pred>::type
+    remove_if(Seq& seq)
+    {
+        return typename result_of::remove_if<Seq&, Pred>::type(seq);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -21,19 +21,19 @@
         {
             template <typename OtherOldValue>
             replace_helper(
-                    BOOST_FUSION_R_ELSE_LREF(OtherOldValue) old_value
+                    BOOST_FUSION_R_ELSE_CLREF(OtherOldValue) old_value
                   , int)
               : old_value(BOOST_FUSION_FORWARD(OtherOldValue,old_value))
             {}
 
             template<typename Replacer>
-            replace_helper(BOOST_FUSION_R_ELSE_LREF(Replacer) replacer)
+            replace_helper(BOOST_FUSION_R_ELSE_CLREF(Replacer) replacer)
               : old_value(BOOST_FUSION_FORWARD(Replacer,replacer).old_value)
             {}
 
             template<typename Replacer>
             replace_helper&
-            operator=(BOOST_FUSION_R_ELSE_LREF(Replacer) replacer)
+            operator=(BOOST_FUSION_R_ELSE_CLREF(Replacer) replacer)
             {
                 old_value=BOOST_FUSION_FORWARD(Replacer,replacer).old_value;
                 return *this;
@@ -41,7 +41,7 @@
 
             template <typename U>
             bool
-            operator()(BOOST_FUSION_R_ELSE_LREF(U) x) const
+            operator()(BOOST_FUSION_R_ELSE_CLREF(U) x) const
             {
                 return x==old_value;
             }
@@ -70,17 +70,17 @@
     template <typename Seq, typename OldValue, typename NewValue>
     inline typename
         result_of::replace<
-            BOOST_FUSION_R_ELSE_LREF(Seq)
+            BOOST_FUSION_R_ELSE_CLREF(Seq)
           , BOOST_FUSION_R_ELSE_CLREF(OldValue)
           , BOOST_FUSION_R_ELSE_CLREF(NewValue)
         >::type
-    replace(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
+    replace(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
             BOOST_FUSION_R_ELSE_CLREF(OldValue) old_value,
             BOOST_FUSION_R_ELSE_CLREF(NewValue) new_value)
     {
         typedef typename
             result_of::replace<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
               , BOOST_FUSION_R_ELSE_CLREF(OldValue)
               , BOOST_FUSION_R_ELSE_CLREF(NewValue)
             >::replacer
@@ -91,20 +91,6 @@
                   , replacer(BOOST_FUSION_FORWARD(OldValue,old_value),0)
                   , BOOST_FUSION_FORWARD(NewValue,new_value));
     }
-
-#ifdef BOOST_NO_RVALUE_REFERENCES
-    template <typename Seq, typename OldValue, typename NewValue>
-    inline typename
-        result_of::replace<Seq&, OldValue const&, NewValue const&>::type
-    replace(Seq& seq,OldValue const& old_value,NewValue const& new_value)
-    {
-        typedef typename
-            result_of::replace<Seq&, OldValue const&, NewValue const&>::replacer
-        replacer;
-
-        return replace_if(seq, replacer(old_value,0), new_value);
-    }
-#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -33,18 +33,18 @@
 
     template <typename Seq, typename F, typename NewValue>
     inline typename result_of::replace_if<
-        BOOST_FUSION_R_ELSE_LREF(Seq)
-      , BOOST_FUSION_R_ELSE_LREF(F)
+        BOOST_FUSION_R_ELSE_CLREF(Seq)
+      , BOOST_FUSION_R_ELSE_CLREF(F)
       , BOOST_FUSION_R_ELSE_CLREF(NewValue)
     >::type
-    replace_if(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
-            BOOST_FUSION_R_ELSE_LREF(F) pred,
+    replace_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
+            BOOST_FUSION_R_ELSE_CLREF(F) pred,
             BOOST_FUSION_R_ELSE_CLREF(NewValue) new_value)
     {
-        typedef typename
+        typedef
             result_of::replace_if<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
-              , BOOST_FUSION_R_ELSE_LREF(F)
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
+              , BOOST_FUSION_R_ELSE_CLREF(F)
               , BOOST_FUSION_R_ELSE_CLREF(NewValue)
             >
         result;
@@ -54,6 +54,18 @@
                     BOOST_FUSION_FORWARD(F,pred),
                     BOOST_FUSION_FORWARD(NewValue,new_value)));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename F, typename NewValue>
+    inline typename result_of::replace_if<Seq&, F const&, NewValue const&>::type
+    replace_if(Seq& seq,F const& pred,NewValue const& new_value)
+    {
+        typedef result_of::replace_if<Seq&, F const&, NewValue const&> result;
+
+        return typename result::type(seq,
+                typename result::replacer(pred,new_value));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -22,12 +22,21 @@
     }
 
     template <typename Seq>
-    inline typename result_of::reverse<BOOST_FUSION_R_ELSE_LREF(Seq)>::type
-    reverse(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+    inline typename result_of::reverse<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
+    reverse(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
-        return typename result_of::reverse<BOOST_FUSION_R_ELSE_LREF(Seq)>::type(
+        return typename result_of::reverse<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type(
                 BOOST_FUSION_FORWARD(Seq,seq));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq>
+    inline typename result_of::reverse<Seq&>::type
+    reverse(Seq& seq)
+    {
+        return typename result_of::reverse<Seq&>::type(seq);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -10,6 +10,8 @@
 
 #include <boost/fusion/view/transform_view/transform_view.hpp>
 
+#include <boost/preprocessor/empty.hpp>
+
 namespace boost { namespace fusion
 {
     struct void_;
@@ -36,40 +38,61 @@
     template <typename Seq, typename F>
     inline typename
         result_of::transform<
-            BOOST_FUSION_R_ELSE_LREF(Seq)
-          , BOOST_FUSION_R_ELSE_LREF(F)
+            BOOST_FUSION_R_ELSE_CLREF(Seq)
+          , BOOST_FUSION_R_ELSE_CLREF(F)
         >::type
-    transform(BOOST_FUSION_R_ELSE_LREF(Seq) seq, BOOST_FUSION_R_ELSE_LREF(F) f)
+    transform(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return typename
             result_of::transform<
-                BOOST_FUSION_R_ELSE_LREF(Seq)
-              , BOOST_FUSION_R_ELSE_LREF(F)
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
+              , BOOST_FUSION_R_ELSE_CLREF(F)
             >::type(BOOST_FUSION_FORWARD(Seq,seq), BOOST_FUSION_FORWARD(F,f));
     }
 
-    template <typename Seq1, typename Seq2, typename F>
-    inline typename
-        result_of::transform<
-            BOOST_FUSION_R_ELSE_LREF(Seq1)
-          , BOOST_FUSION_R_ELSE_LREF(Seq2)
-          , BOOST_FUSION_R_ELSE_LREF(F)
-        >::type
-    transform(
-            BOOST_FUSION_R_ELSE_LREF(Seq1) seq1
-          , BOOST_FUSION_R_ELSE_LREF(Seq2) seq2
-          , BOOST_FUSION_R_ELSE_LREF(F) f)
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq, typename F>
+    inline typename result_of::transform<Seq&, F const&>::type
+    transform(Seq& seq, F const& f)
     {
-        return typename
-            result_of::transform<
-                BOOST_FUSION_R_ELSE_LREF(Seq1)
-              , BOOST_FUSION_R_ELSE_LREF(Seq2)
-              , BOOST_FUSION_R_ELSE_LREF(F)
-            >::type(
-                    BOOST_FUSION_FORWARD(Seq1,seq1)
-                  , BOOST_FUSION_FORWARD(Seq2,seq2)
-                  , BOOST_FUSION_FORWARD(F,f));
+        return typename result_of::transform<Seq&, F const&>::type(seq, f);
     }
+#endif
+
+#define BOOST_FUSION_TRANSFORM_BINARY(SEQ1_CV_REF_MODIFIER,SEQ2_CV_REF_MODIFIER)\
+    template <typename Seq1, typename Seq2, typename F>\
+    inline typename\
+        result_of::transform<\
+            Seq1 SEQ1_CV_REF_MODIFIER\
+          , Seq2 SEQ2_CV_REF_MODIFIER\
+          , BOOST_FUSION_R_ELSE_CLREF(F)\
+        >::type\
+    transform(\
+            Seq1 SEQ1_CV_REF_MODIFIER seq1\
+          , Seq2 SEQ2_CV_REF_MODIFIER seq2\
+          , BOOST_FUSION_R_ELSE_CLREF(F) f)\
+    {\
+        return typename\
+            result_of::transform<\
+                Seq1 SEQ1_CV_REF_MODIFIER\
+              , Seq2 SEQ2_CV_REF_MODIFIER\
+              , BOOST_FUSION_R_ELSE_CLREF(F)\
+            >::type(\
+                    BOOST_FUSION_FORWARD(Seq1 SEQ1_CV_REF_MODIFIER,seq1)\
+                  , BOOST_FUSION_FORWARD(Seq2 SEQ2_CV_REF_MODIFIER,seq2)\
+                  , BOOST_FUSION_FORWARD(F,f));\
+    }
+
+    BOOST_FUSION_TRANSFORM_BINARY(
+            BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()),
+            BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()));
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    BOOST_FUSION_TRANSFORM_BINARY(&,const&);
+    BOOST_FUSION_TRANSFORM_BINARY(const&,&);
+    BOOST_FUSION_TRANSFORM_BINARY(&,&);
+#endif
+
+#undef BOOST_FUSION_TRANSFORM_BINARY
 }}
 
 #endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/convert_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/convert_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,91 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/sequence/intrinsic/begin.hpp>
+#   include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
+#include <boost/fusion/support/ref.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/container/detail/pp/as_seq.hpp>
+#else
+
+#   include <boost/fusion/container/detail/variadic_templates/as_seq.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+    namespace extension
+    {
+        template <typename T>
+        struct convert_impl;
+
+        template <>
+        struct convert_impl<BOOST_PP_CAT(BOOST_FUSION_SEQ_NAME,_tag)>
+        {
+            template <typename SeqRef>
+            struct apply
+            {
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+                typedef typename
+                    detail::BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME)<
+                        result_of::size<SeqRef>::value
+                    >
+                gen;
+                typedef typename
+                    gen::template apply<
+                        typename result_of::begin<SeqRef>::type
+                    >::type
+                type;
+#else
+                typedef typename
+                    detail::detail::BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME)<
+                        SeqRef
+                    >
+                gen;
+                typedef typename gen::apply::type type;
+#endif
+
+                static type call(SeqRef seq)
+                {
+                    return type(fusion::sequence_assign(
+                            BOOST_FUSION_FORWARD(SeqRef,seq)));
+                }
+            };
+        };
+    }
+
+    namespace result_of
+    {
+        template <typename Seq>
+        struct BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME)
+        {
+            typedef typename
+                extension::convert_impl<
+                    BOOST_PP_CAT(BOOST_FUSION_SEQ_NAME,_tag)
+                >::template apply<typename detail::add_lref<Seq>::type>
+            gen;
+
+            typedef typename gen::apply::type type;
+        };
+    }
+
+    template <typename Seq>
+    inline typename
+        result_of::BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME)<
+            BOOST_FUSION_R_ELSE_CLREF(Seq)
+        >::type
+    BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME)(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+    {
+        return
+            result_of::BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME)<
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
+            >::gen::call(seq);
+    }
+
+}}
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,60 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PP_IS_ITERATING
+
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/dec.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <int Size>
+    struct BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME);
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/as_seq.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
+#include BOOST_PP_ITERATE()
+}}}
+
+#else
+
+#define N BOOST_PP_ITERATION()
+
+    template <>
+    struct BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME)<N>
+    {
+        template <typename It0>
+        struct apply
+        {
+#if N
+            typedef typename result_of::value_of<It0>::type T0;
+#endif
+
+#define BOOST_FUSION_IT_VALUE_ENUM(Z, N, _)\
+            typedef typename\
+                result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
+            BOOST_PP_CAT(It, N);\
+            typedef typename\
+                result_of::value_of<BOOST_PP_CAT(It, N)>::type\
+            BOOST_PP_CAT(T, N);
+
+            BOOST_PP_REPEAT_FROM_TO(1, N, BOOST_FUSION_IT_VALUE_ENUM, _)
+
+#undef BOOST_FUSION_IT_VALUE_ENUM
+
+            typedef BOOST_FUSION_SEQ_NAME<BOOST_PP_ENUM_PARAMS(N, T)> type;
+        };
+    };
+
+#undef N
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,62 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PP_IS_ITERATING
+#   ifndef BOOST_FUSION_SEQ_NAME
+#       ifndef BOOST_FUSION_CONTAINER_DETAIL_PP_FORWARD_CTOR_HPP
+#           include <boost/fusion/support/template.hpp>
+
+#           include <boost/config.hpp>
+#           include <boost/preprocessor/iterate.hpp>
+#           include <boost/preprocessor/repetition/enum_params.hpp>
+#           include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#       endif
+#   else
+#       define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#       define BOOST_PP_ITERATION_LIMITS (1, BOOST_FUSION_MAX_SEQ_SIZE)
+#       include BOOST_PP_ITERATE()
+
+#       ifdef BOOST_NO_RVALUE_REFERENCES
+    template<typename SeqAssign>
+    BOOST_FUSION_SEQ_NAME(SeqAssign const& seq_assign)
+#       ifdef BOOST_FUSION_USE_BASE_TYPE
+      : base_type(seq_assign)
+#       else
+      : data(seq_assign)
+#       endif
+    {}
+#       endif
+#   endif
+
+#else
+
+#   define N BOOST_PP_ITERATION()
+
+#   ifndef BOOST_NO_RVALUE_REFERENCES
+    VARIADIC_TEMPLATE_A(N)
+#   endif
+#   if N == 1
+    explicit
+#   endif
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+    BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(N))
+#       ifdef BOOST_FUSION_USE_BASE_TYPE
+      : base_type(EXPAND_PARAMETERS(N))
+#       else
+      : data(EXPAND_PARAMETERS(N))
+#       endif
+    {}
+#   else
+    BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_A(N))
+#       ifdef BOOST_FUSION_USE_BASE_TYPE
+      : base_type(EXPAND_PARAMETERS_A(N))
+#       else
+      : data(EXPAND_PARAMETERS_A(N))
+#       endif
+    {}
+#   endif
+
+#   undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/as_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/as_seq.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,31 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/fusion/mpl/begin.hpp>
+#include <boost/fusion/mpl/end.hpp>
+#include <boost/fusion/support/variadic_templates/variadic_quote.hpp>
+#include <boost/fusion/support/to_random_access_mpl_seq.hpp>
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/unpack_args.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template<typename SeqRef>
+    struct BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME)
+    {
+        struct apply
+        {
+            typedef typename
+                mpl::apply<
+                    mpl::unpack_args<variadic_quote<BOOST_FUSION_SEQ_NAME> >
+                  , typename detail::to_random_access_mpl_seq<
+                        typename detail::remove_reference<SeqRef>::type
+                    >::type
+                >::type
+            type;
+        };
+    };
+}}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,7 +8,6 @@
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_HPP
 
-//TODO move ignore.hpp in the _tie-headers?
 #include <boost/fusion/container/generation/ignore.hpp>
 #include <boost/fusion/container/generation/cons_tie.hpp>
 #include <boost/fusion/container/generation/list_tie.hpp>
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/make_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/make_seq.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,12 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/container/generation/detail/pp/make_seq.hpp>
+#else
+#   include <boost/fusion/container/generation/detail/variadic_templates/make_seq.hpp>
+#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/list_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/list_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,79 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_LIST_TIE_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_LIST_TIE_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/fusion/container/list/list.hpp>
-
-namespace boost { namespace fusion
-{
-    struct void_;
-        
-    namespace result_of
-    {
-        template <
-            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_LIST_SIZE, typename T, void_)
-          , typename Extra = void_
-        >
-        struct list_tie;
-    }
-
-// $$$ shouldn't we remove_reference first to allow references? $$$
-#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/list_tie.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_LIST_SIZE)
-#include BOOST_PP_ITERATE()
-    
-#undef BOOST_FUSION_REF
-
-}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
-        #define TEXT(z, n, text) , text
-        struct list_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
-        #undef TEXT
-#else
-        struct list_tie<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
-        {
-            typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
-        };
-    }
-
-    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-    inline list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
-    list_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
-    {
-        return list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
-            BOOST_PP_ENUM_PARAMS(N, _));
-    }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_list.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,91 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_LIST_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_LIST_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/fusion/container/list/list.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-
-namespace boost { namespace fusion
-{
-    struct void_;
-        
-    namespace result_of
-    {
-        template <
-            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_LIST_SIZE, typename T, void_)
-          , typename Extra = void_
-        >
-        struct make_list;
-            
-        template <>
-        struct make_list<>
-        {
-            typedef list<> type;
-        };
-    }
-    
-    inline list<>
-    make_list()
-    {
-        return list<>();
-    }
-
-#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data)                               \
-    typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_list.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_LIST_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_AS_FUSION_ELEMENT
-
-}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
-        #define TEXT(z, n, text) , text
-        struct make_list< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
-        #undef TEXT
-#else
-        struct make_list<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
-        {
-            typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
-        };
-    }
-
-    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-    inline list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
-    make_list(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
-    {
-        return list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
-            BOOST_PP_ENUM_PARAMS(N, _));
-    }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -1,106 +1,99 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
 
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
 
 #ifndef BOOST_PP_IS_ITERATING
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_MAP_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_MAP_HPP
 
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
 #include <boost/fusion/container/map/map.hpp>
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
 #include <boost/fusion/support/pair.hpp>
 
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/mul.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
 namespace boost { namespace fusion
 {
-    struct void_;
-        
     namespace result_of
     {
-        template <
-            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_VECTOR_SIZE, typename K, void_)
-          , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_VECTOR_SIZE, typename D, void_)
-          , typename Extra = void_
-        >
+        VARIADIC_TEMPLATE_WITH_DEFAULT(BOOST_PP_MUL(FUSION_MAX_MAP_SIZE,2))
         struct make_map;
-            
-        template <>
-        struct make_map<>
-        {
-            typedef map<> type;
-        };
     }
     
-    inline map<>
-    make_map()
-    {
-        return map<>();
-    }
-
-#define BOOST_FUSION_PAIR(z, n, data)                                           \
-    fusion::pair<                                                               \
-        BOOST_PP_CAT(K, n)                                                      \
-      , typename detail::as_fusion_element<BOOST_PP_CAT(D, n)>::type>
-
-#define BOOST_FUSION_MAKE_PAIR(z, n, data)                                      \
-    fusion::make_pair<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n))                   \
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_map.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_map.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
 #include BOOST_PP_ITERATE()
 
-#undef BOOST_FUSION_PAIR
-#undef BOOST_FUSION_MAKE_PAIR
-
 }}
 
 #endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
+#else
 
 #define N BOOST_PP_ITERATION()
 
     namespace result_of
     {
-        template <
-            BOOST_PP_ENUM_PARAMS(N, typename K)
-          , BOOST_PP_ENUM_PARAMS(N, typename D)
-        >
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
-         #define TEXT(z, n, text) , text
-         struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_VECTOR_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_)>
-         #undef TEXT
-#else
-        struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
-#endif
+        VARIADIC_TEMPLATE(BOOST_PP_MUL(N,2))
+        struct make_map
+        EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+            BOOST_PP_MUL(FUSION_MAX_MAP_SIZE,2),
+            BOOST_PP_MUL(N,2))
         {
-            typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)> type;
+#define BOOST_FUSION_MAP_ELEMENT(Z,INNER_N,_)\
+            pair<\
+                BOOST_PP_CAT(T,INNER_N),\
+                typename detail::as_fusion_element<\
+                    BOOST_PP_CAT(T,BOOST_PP_ADD(N,INNER_N))\
+                >::type\
+            >
+
+            typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_MAP_ELEMENT, _)> type;
+
+#undef BOOST_FUSION_MAP_ELEMENT
         };
     }
 
-    template <
-        BOOST_PP_ENUM_PARAMS(N, typename K)
-      , BOOST_PP_ENUM_PARAMS(N, typename D)
-    >
-    inline map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>
-    make_map(BOOST_PP_ENUM_BINARY_PARAMS(N, D, const& _))
+#define BOOST_FUSION_MAKE_MAP_ARGS2(Z,INNER_N,_)\
+    BOOST_PP_CAT(A,BOOST_PP_ADD(N,INNER_N))\
+        BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY())
+
+    VARIADIC_TEMPLATE_A(BOOST_PP_MUL(N,2))
+    inline
+#if N
+        typename
+#endif
+        result_of::make_map<
+            BOOST_PP_ENUM_PARAMS(N, A)
+          , BOOST_PP_ENUM(N, BOOST_FUSION_MAKE_MAP_ARGS2, _)
+        >::type
+
+#define BOOST_FUSION_MAKE_MAP_ARGUMENTS(Z,INNER_N,__)\
+    BOOST_PP_CAT(A,BOOST_PP_ADD(N,INNER_N))\
+        BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY())\
+    BOOST_PP_CAT(_,INNER_N)
+
+    make_map(BOOST_PP_ENUM(N, BOOST_FUSION_MAKE_MAP_ARGUMENTS, _))
+
+#undef BOOST_FUSION_MAKE_MAP_ARGUMENTS
     {
-        return map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>(
-            BOOST_PP_ENUM(N, BOOST_FUSION_MAKE_PAIR, _));
+        return
+#if N
+            typename
+#endif
+            result_of::make_map<
+                BOOST_PP_ENUM_PARAMS(N, A)
+              , BOOST_PP_ENUM(N, BOOST_FUSION_MAKE_MAP_ARGS2, _)
+            >::type(EXPAND_PARAMETERS_A(N));
     }
 
+#undef BOOST_FUSION_MAKE_MAP_ARGS2
+
 #undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,71 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PP_IS_ITERATING
+
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        VARIADIC_TEMPLATE_WITH_DEFAULT(BOOST_FUSION_MAX_SEQ_SIZE)
+        struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME);
+    }
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_seq.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
+#include BOOST_PP_ITERATE()
+
+}}
+
+#else
+
+#define N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        VARIADIC_TEMPLATE(N)
+        struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME)
+            EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+                BOOST_FUSION_MAX_SEQ_SIZE,N)
+        {
+            typedef
+                BOOST_FUSION_SEQ_NAME<
+                    EXPAND_TEMPLATE_ARGUMENTS_BINARY(
+                            N,
+                            typename detail::as_fusion_element<,
+                            >::type
+                    )
+                >
+            type;
+        };
+    }
+
+    VARIADIC_TEMPLATE_A(N)
+    inline
+#if N
+        typename
+#endif
+        result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME)<
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(N)
+        >::type
+    BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME)(
+        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(N))
+    {
+        return
+#if N
+            typename
+#endif
+            result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME)<
+                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(N)
+            >::type(EXPAND_PARAMETERS_A(N));
+    }
+
+#undef N
+#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_set.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_set.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,93 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_SET_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_SET_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/fusion/container/set/set.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-#include <boost/fusion/support/pair.hpp>
-
-namespace boost { namespace fusion
-{
-    struct void_;
-        
-    namespace result_of
-    {
-        template <
-            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_VECTOR_SIZE, typename T, void_)
-          , typename Extra = void_
-        >
-        struct make_set;
-            
-        template <>
-        struct make_set<>
-        {
-            typedef set<> type;
-        };
-    }
-    
-    inline set<>
-    make_set()
-    {
-        return set<>();
-    }
-
-#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data)                               \
-    typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_set.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_ELEMENT
-#undef BOOST_FUSION_AS_ELEMENT
-
-}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
-        #define TEXT(z, n, text) , text
-        struct make_set< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_SET_SIZE, TEXT, void_) >
-        #undef TEXT
-#else
-        struct make_set<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
-        {
-            typedef set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
-        };
-    }
-
-    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-    inline set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
-    make_set(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
-    {
-        return set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
-            BOOST_PP_ENUM_PARAMS(N, _));
-    }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_vector.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,91 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_VECTOR_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_VECTOR_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-
-namespace boost { namespace fusion
-{
-    struct void_;
-        
-    namespace result_of
-    {
-        template <
-            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_VECTOR_SIZE, typename T, void_)
-          , typename Extra = void_
-        >
-        struct make_vector;
-            
-        template <>
-        struct make_vector<>
-        {
-            typedef vector<> type;
-        };
-    }
-    
-    inline vector<>
-    make_vector()
-    {
-        return vector<>();
-    }
-
-#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data)                               \
-    typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_vector.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_AS_FUSION_ELEMENT
-
-}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
-        #define TEXT(z, n, text) , text
-        struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
-        #undef TEXT
-#else
-        struct make_vector<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
-        {
-            typedef vector<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
-        };
-    }
-
-    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-    inline vector<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
-    make_vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
-    {
-        return vector<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
-            BOOST_PP_ENUM_PARAMS(N, _));
-    }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -1,110 +1,99 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2006 Dan Marsden
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
 
 #ifndef BOOST_PP_IS_ITERATING
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAP_TIE_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAP_TIE_HPP
 
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
 #include <boost/fusion/container/map/map.hpp>
-#include <boost/fusion/container/map/limits.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
 #include <boost/fusion/support/pair.hpp>
-#include <boost/fusion/container/generation/pair_tie.hpp>
-#include <boost/type_traits/add_reference.hpp>
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/mul.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
 
 namespace boost { namespace fusion
 {
-    struct void_;
-        
     namespace result_of
     {
-        template <
-            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_MAP_SIZE, typename K, void_)
-          , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_MAP_SIZE, typename D, void_)
-          , typename Extra = void_
-        >
+        VARIADIC_TEMPLATE_WITH_DEFAULT(BOOST_PP_MUL(FUSION_MAX_MAP_SIZE,2))
         struct map_tie;
-            
-        template <>
-        struct map_tie<>
-        {
-            typedef map<> type;
-        };
     }
     
-    inline map<>
-    map_tie()
-    {
-        return map<>();
-    }
-
-#define BOOST_FUSION_TIED_PAIR(z, n, data)                                                          \
-    fusion::pair<                                                                                   \
-        BOOST_PP_CAT(K, n)                                                                          \
-      , typename add_reference<BOOST_PP_CAT(D, n)>::type>
-
-#define BOOST_FUSION_PAIR_TIE(z, n, data)                                      \
-    fusion::pair_tie<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n))                   \
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/map_tie.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/map_tie.hpp>
 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
 #include BOOST_PP_ITERATE()
 
-#undef BOOST_FUSION_PAIR
-#undef BOOST_FUSION_MAKE_PAIR
-
 }}
 
 #endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
+#else
 
 #define N BOOST_PP_ITERATION()
 
     namespace result_of
     {
-        template <
-            BOOST_PP_ENUM_PARAMS(N, typename K)
-          , BOOST_PP_ENUM_PARAMS(N, typename D)
-        >
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
-        #define TEXT(z, n, text) , text
-
-        struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_MAP_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_MAP_SIZE, TEXT, void_)>
-        #undef TEXT
-#else
-        struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
-#endif
+        VARIADIC_TEMPLATE(BOOST_PP_MUL(N,2))
+        struct map_tie
+        EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+            BOOST_PP_MUL(FUSION_MAX_MAP_SIZE,2),
+            BOOST_PP_MUL(N,2))
         {
-            typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)> type;
+#define BOOST_FUSION_MAP_ELEMENT(Z,INNER_N,_)\
+            pair<\
+                BOOST_PP_CAT(T,INNER_N),\
+                typename detail::as_fusion_element_ref<\
+                    BOOST_PP_CAT(T,BOOST_PP_ADD(N,INNER_N))\
+                >::type\
+            >
+
+            typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_MAP_ELEMENT, _)> type;
+
+#undef BOOST_FUSION_MAP_ELEMENT
         };
     }
 
-    template <
-        BOOST_PP_ENUM_PARAMS(N, typename K)
-      , BOOST_PP_ENUM_PARAMS(N, typename D)
-    >
-    inline map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>
-    map_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, D, & _))
+#define BOOST_FUSION_MAP_TIE_ARGS2(Z,INNER_N,_)\
+    BOOST_PP_CAT(A,BOOST_PP_ADD(N,INNER_N))\
+        BOOST_FUSION_R_ELSE_LREF(BOOST_PP_EMPTY())
+
+    VARIADIC_TEMPLATE_A(BOOST_PP_MUL(N,2))
+    inline
+#if N
+        typename
+#endif
+        result_of::map_tie<
+            BOOST_PP_ENUM_PARAMS(N, A)
+          , BOOST_PP_ENUM(N, BOOST_FUSION_MAP_TIE_ARGS2, _)
+        >::type
+
+#define BOOST_FUSION_MAP_TIE_ARGUMENTS(Z,INNER_N,__)\
+    BOOST_PP_CAT(A,BOOST_PP_ADD(N,INNER_N))\
+        BOOST_FUSION_R_ELSE_LREF(BOOST_PP_EMPTY())\
+    BOOST_PP_CAT(_,INNER_N)
+
+    map_tie(BOOST_PP_ENUM(N, BOOST_FUSION_MAP_TIE_ARGUMENTS, _))
+
+#undef BOOST_FUSION_MAP_TIE_ARGUMENTS
     {
-        return map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>(
-            BOOST_PP_ENUM(N, BOOST_FUSION_PAIR_TIE, _));
+        return
+#if N
+            typename
+#endif
+            result_of::map_tie<
+                BOOST_PP_ENUM_PARAMS(N, A)
+              , BOOST_PP_ENUM(N, BOOST_FUSION_MAP_TIE_ARGS2, _)
+            >::type(EXPAND_PARAMETERS_A(N));
     }
 
+#undef BOOST_FUSION_MAP_TIE_ARGS2
+
 #undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,71 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PP_IS_ITERATING
+
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        VARIADIC_TEMPLATE_WITH_DEFAULT(BOOST_FUSION_MAX_SEQ_SIZE)
+        struct BOOST_FUSION_FUNCTION_NAME;
+    }
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/seq_tie.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
+#include BOOST_PP_ITERATE()
+
+}}
+
+#else
+
+#define N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        VARIADIC_TEMPLATE(N)
+        struct BOOST_FUSION_FUNCTION_NAME
+            EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+                    BOOST_FUSION_MAX_SEQ_SIZE,N)
+        {
+            typedef
+                BOOST_FUSION_SEQ_NAME<
+                    EXPAND_TEMPLATE_ARGUMENTS_BINARY(
+                            N,
+                            typename detail::as_fusion_element_ref<,
+                            >::type
+                    )
+                >
+            type;
+        };
+    }
+
+    VARIADIC_TEMPLATE_A(N)
+    inline
+#if N
+        typename
+#endif
+        result_of::BOOST_FUSION_FUNCTION_NAME<
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(N)
+        >::type
+    BOOST_FUSION_FUNCTION_NAME(
+        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(N))
+    {
+        return
+#if N
+            typename
+#endif
+            result_of::BOOST_FUSION_FUNCTION_NAME<
+                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(N)
+            >::type(EXPAND_PARAMETERS_A(N));
+    }
+
+#undef N
+#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/vector_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/vector_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,78 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_VECTOR_TIE_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_VECTOR_TIE_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/fusion/container/vector/vector.hpp>
-
-namespace boost { namespace fusion
-{
-    struct void_;
-        
-    namespace result_of
-    {
-        template <
-            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
-                FUSION_MAX_VECTOR_SIZE, typename T, void_)
-          , typename Extra = void_
-        >
-        struct vector_tie;
-    }
-
-#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/vector_tie.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-    
-#undef BOOST_FUSION_REF
-
-}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
-        #define TEXT(z, n, text) , text
-        struct vector_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
-        #undef TEXT
-#else
-        struct vector_tie<BOOST_PP_ENUM_PARAMS(N, T)>
-#endif
-        {
-            typedef vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
-        };
-    }
-
-    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-    inline vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
-    vector_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
-    {
-        return vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
-            BOOST_PP_ENUM_PARAMS(N, _));
-    }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/seq_tie.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/seq_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,25 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+#include <boost/fusion/container/generation/ignore.hpp>
+
+#ifndef BOOST_FUSION_FUNCTION_NAME
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_FUSION_UNDEF_FUNCTION_NAME
+#   define BOOST_FUSION_FUNCTION_NAME BOOST_PP_CAT(BOOST_FUSION_SEQ_NAME,_tie)
+#endif
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/container/generation/detail/pp/seq_tie.hpp>
+#else
+#   include <boost/fusion/container/generation/detail/variadic_templates/seq_tie.hpp>
+#endif
+
+#ifdef BOOST_FUSION_UNDEF_FUNCTION_NAME
+#   undef BOOST_FUSION_FUNCTION_NAME
+#   undef BOOST_FUSION_UNDEF_FUNCTION_NAME
+#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/list_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/list_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,37 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_LIST_TIE_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_LIST_TIE_HPP
-
-#include <boost/fusion/container/list/list.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename... Types>
-        struct list_tie
-        {
-            typedef
-                list<typename detail::as_fusion_element_ref<Types>::type...>
-            type;
-        };
-    }
-
-    template <typename... Types>
-    inline typename
-        result_of::list_tie<BOOST_FUSION_R_ELSE_LREF(Types)...>::type
-    list_tie(BOOST_FUSION_R_ELSE_LREF(Types)... types)
-    {
-        return typename
-            result_of::list_tie<BOOST_FUSION_R_ELSE_LREF(Types)...>::type(
-                BOOST_FUSION_FORWARD(Types, types)...);
-    }
-
-}}
-
-#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_list.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,38 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_MAKE_LIST_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_MAKE_LIST_HPP
-
-#include <boost/fusion/container/list/list.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename... Types>
-        struct make_list
-        {
-            typedef
-                list<typename detail::as_fusion_element<Types>::type...>
-            type;
-        };
-    }
-
-    //TODO cschmidt: ?!
-    template <typename... Types>
-    inline typename
-        result_of::make_list<BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
-    make_list(BOOST_FUSION_R_ELSE_CLREF(Types)... types)
-    {
-        return typename
-            result_of::make_list<BOOST_FUSION_R_ELSE_CLREF(Types)...>::type(
-                    BOOST_FUSION_FORWARD(Types, types)...);
-    }
-
-}}
-
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_seq.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,40 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename... Types>
+        struct BOOST_PP_CAT(make,BOOST_FUSION_SEQ_NAME)
+        {
+            typedef
+                BOOST_FUSION_SEQ_NAME<
+                    typename detail::as_fusion_element<Types>::type...
+                >
+            type;
+        };
+    }
+
+    template <typename... Types>
+    inline typename
+        result_of::BOOST_PP_CAT(make,BOOST_FUSION_SEQ_NAME)<
+            BOOST_FUSION_R_ELSE_CLREF(Types)...
+        >::type
+    BOOST_PP_CAT(make,BOOST_FUSION_SEQ_NAME)(
+        BOOST_FUSION_R_ELSE_CLREF(Types)... types)
+    {
+        return typename
+            result_of::BOOST_PP_CAT(make,BOOST_FUSION_SEQ_NAME)<
+                BOOST_FUSION_R_ELSE_CLREF(Types)...
+            >::type(BOOST_FUSION_FORWARD(Types, types)...);
+    }
+
+}}
+
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_set.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_set.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,38 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_MAKE_SET_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_MAKE_SET_HPP
-
-#include <boost/fusion/container/set/set.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename... Types>
-        struct make_set
-        {
-            typedef
-                set<typename detail::as_fusion_element<Types>::type...>
-            type;
-        };
-    }
-
-    //TODO cschmidt: ?!
-    template <typename... Types>
-    inline typename
-        result_of::make_set<BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
-    make_set(BOOST_FUSION_R_ELSE_CLREF(Types)... types)
-    {
-        return typename
-            result_of::make_set<BOOST_FUSION_R_ELSE_CLREF(Types)...>::type(
-                    BOOST_FUSION_FORWARD(Types, types)...);
-    }
-
-}}
-
-#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_vector.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,38 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_MAKE_VECTOR_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_MAKE_VECTOR_HPP
-
-#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename... Types>
-        struct make_vector
-        {
-            typedef
-                vector<typename detail::as_fusion_element<Types>::type...>
-            type;
-        };
-    }
-
-    //TODO cschmidt: ?!
-    template <typename... Types>
-    inline typename
-        result_of::make_vector<BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
-    make_vector(BOOST_FUSION_R_ELSE_CLREF(Types)... types)
-    {
-        return typename
-            result_of::make_vector<BOOST_FUSION_R_ELSE_CLREF(Types)...>::type(
-                    BOOST_FUSION_FORWARD(Types, types)...);
-    }
-
-}}
-
-#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -71,13 +71,13 @@
     //TODO cschmidt: ?!
     template <typename... Keys, typename... Types>
     inline typename
-        result_of::map_tie<Keys...,BOOST_FUSION_R_ELSE_LREF(Types)...>::type
-    map_tie(BOOST_FUSION_R_ELSE_LREF(Types)... types)
+        result_of::map_tie<Keys...,BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
+    map_tie(BOOST_FUSION_R_ELSE_CLREF(Types)... types)
     {
         typedef typename
-            result_of::map_tie<Keys...,BOOST_FUSION_R_ELSE_LREF(Types)...>::type
+            result_of::map_tie<Keys...,BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
         type;
-        return type(pair<Keys,BOOST_FUSION_R_ELSE_LREF(Types)>
+        return type(pair<Keys,BOOST_FUSION_R_ELSE_CLREF(Types)>
                     (BOOST_FUSION_FORWARD(Types, types))...);
     }
 
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/seq_tie.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/seq_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,39 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template <typename... Types>
+        struct BOOST_FUSION_FUNCTION_NAME
+        {
+            typedef
+                BOOST_FUSION_SEQ_NAME<
+                    typename detail::as_fusion_element_ref<Types>::type...
+                >
+            type;
+        };
+    }
+
+    template <typename... Types>
+    inline typename
+        result_of::BOOST_FUSION_FUNCTION_NAME<
+            BOOST_FUSION_R_ELSE_CLREF(Types)...
+        >::type
+    BOOST_FUSION_FUNCTION_NAME(BOOST_FUSION_R_ELSE_CLREF(Types)... types)
+    {
+        return typename
+            BOOST_FUSION_FUNCTION_NAME<
+                BOOST_FUSION_R_ELSE_CLREF(Types)...
+            >::type(BOOST_FUSION_FORWARD(Types, types)...);
+    }
+
+}}
+
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/vector_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/vector_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,37 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_VECTOR_TIE_HPP
-#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_VARIADIC_TEMPLATES_VECTOR_TIE_HPP
-
-#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename... Types>
-        struct vector_tie
-        {
-            typedef
-                vector<typename detail::as_fusion_element_ref<Types>::type...>
-            type;
-        };
-    }
-
-    template <typename... Types>
-    inline typename
-        result_of::vector_tie<BOOST_FUSION_R_ELSE_LREF(Types)...>::type
-    vector_tie(BOOST_FUSION_R_ELSE_LREF(Types)... types)
-    {
-        return typename
-            result_of::vector_tie<BOOST_FUSION_R_ELSE_LREF(Types)...>::type(
-                BOOST_FUSION_FORWARD(Types, types)...);
-    }
-
-}}
-
-#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/list_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/list_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/list_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -6,11 +6,12 @@
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_LIST_TIE_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_LIST_TIE_HPP
 
-#include <boost/config.hpp>
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/container/generation/detail/pp/list_tie.hpp>
-#else
-#   include <boost/fusion/container/generation/detail/variadic_templates/list_tie.hpp>
-#endif
+#include <boost/fusion/container/list/list.hpp>
+
+#define BOOST_FUSION_SEQ_NAME list
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_LIST_SIZE
+#include <boost/fusion/container/generation/detail/seq_tie.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_list.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_list.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -6,11 +6,12 @@
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_MAKE_LIST_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_MAKE_LIST_HPP
 
-#include <boost/config.hpp>
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/container/generation/detail/pp/make_list.hpp>
-#else
-#   include <boost/fusion/container/generation/detail/variadic_templates/make_list.hpp>
-#endif
+#include <boost/fusion/container/list/list.hpp>
+
+#define BOOST_FUSION_SEQ_NAME list
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_LIST_SIZE
+#include <boost/fusion/container/generation/detail/make_seq.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_set.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_set.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_set.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -6,11 +6,12 @@
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_MAKE_SET_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_MAKE_SET_HPP
 
-#include <boost/config.hpp>
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/container/generation/detail/pp/make_set.hpp>
-#else
-#   include <boost/fusion/container/generation/detail/variadic_templates/make_set.hpp>
-#endif
+#include <boost/fusion/container/set/set.hpp>
+
+#define BOOST_FUSION_SEQ_NAME set
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_SET_SIZE
+#include <boost/fusion/container/generation/detail/make_seq.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_vector.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/make_vector.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -6,11 +6,12 @@
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_MAKE_VECTOR_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_MAKE_VECTOR_HPP
 
-#include <boost/config.hpp>
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/container/generation/detail/pp/make_vector.hpp>
-#else
-#   include <boost/fusion/container/generation/detail/variadic_templates/make_vector.hpp>
-#endif
+#include <boost/fusion/container/vector/vector.hpp>
+
+#define BOOST_FUSION_SEQ_NAME vector
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
+#include <boost/fusion/container/generation/detail/make_seq.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/map_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/map_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/map_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -7,6 +7,8 @@
 #define BOOST_FUSION_CONTAINER_GENERATION_MAP_TIE_HPP
 
 #include <boost/config.hpp>
+#include <boost/fusion/container/generation/ignore.hpp>
+
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
 #   include <boost/fusion/container/generation/detail/pp/map_tie.hpp>
 #else
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/pair_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/pair_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/pair_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -33,17 +33,17 @@
     }
 
     template<typename Key, typename T>
-    typename result_of::pair_tie<Key, BOOST_FUSION_R_ELSE_LREF(T)>::type
-    pair_tie(BOOST_FUSION_R_ELSE_LREF(T) t)
+    typename result_of::pair_tie<Key, BOOST_FUSION_R_ELSE_CLREF(T)>::type
+    pair_tie(BOOST_FUSION_R_ELSE_CLREF(T) t)
     {
         return typename
             result_of::pair_tie<
                 Key
-              , BOOST_FUSION_R_ELSE_LREF(T)
+              , BOOST_FUSION_R_ELSE_CLREF(T)
             >::type(BOOST_FUSION_FORWARD(T,t));
     }
 
-#ifdef BOOST_NO_RVALUE_REFERENCE
+#ifdef BOOST_NO_RVALUE_REFERENCES
     template<typename Key, typename T>
     typename result_of::pair_tie<Key, T const&>::type
     pair_tie(T const& t)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/vector_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/vector_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/vector_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -6,11 +6,12 @@
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_VECTOR_TIE_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_VECTOR_TIE_HPP
 
-#include <boost/config.hpp>
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/container/generation/detail/pp/vector_tie.hpp>
-#else
-#   include <boost/fusion/container/generation/detail/variadic_templates/vector_tie.hpp>
-#endif
+#include <boost/fusion/container/vector/vector.hpp>
+
+#define BOOST_FUSION_SEQ_NAME vector
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
+#include <boost/fusion/container/generation/detail/seq_tie.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -18,10 +18,13 @@
 #include <boost/fusion/support/assign_tags.hpp>
 #include <boost/fusion/support/sequence_assign.hpp>
 
-#include <boost/utility/enable_if.hpp>
 #include <boost/mpl/int.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/or.hpp>
+//#include <boost/utility/enable_if.hpp>
+#ifdef BOOST_NO_RVALUE_REFERENCES
+#   include <boost/call_traits.hpp>
+#endif
 
 #include <boost/fusion/container/list/detail/cons/cons_fwd.hpp>
 #include <boost/fusion/container/list/detail/cons/at_impl.hpp>
@@ -61,7 +64,7 @@
         {}
 
         template<typename SeqAssign>
-        nil(BOOST_FUSION_R_ELSE_LREF(SeqAssign))
+        nil(BOOST_FUSION_R_ELSE_CLREF(SeqAssign))
         {
             //TODO cschmidt: assert!
         }
@@ -114,23 +117,37 @@
 
 #undef CONS_CTOR
 
-        template<typename SeqAssign>
-        cons(BOOST_FUSION_R_ELSE_LREF(SeqAssign) seq,
-             typename enable_if<
-                 is_sequence_assign<SeqAssign> >::type* =NULL)
-          : car(fusion::front(seq.get()))
-          , cdr(detail::assign_by_deref(),
-                  fusion::next(fusion::begin(seq.get())))
-        {}
-
         //cschmidt: rvalue ref if possible, so this does not collide with
         //cons(OtherCar&&,OtherCdr&&)
         template<typename It>
-        cons(detail::assign_by_deref,BOOST_FUSION_R_ELSE_LREF(It) it)
+        cons(detail::assign_by_deref,BOOST_FUSION_R_ELSE_CLREF(It) it)
           : car(fusion::deref(it))
           , cdr(detail::assign_by_deref(),fusion::next(it))
         {}
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        explicit cons(typename call_traits<Car>::param_type car)
+          : car(car)
+        {}
+#else
+        template<typename OtherCar>
+        explicit cons(OtherCar&& car)
+          : car(std::forward<OtherCar>(car))
+        {}
+#endif
+
+#define CONS_ASSIGN_CTOR(COMBINATION,_)\
+        template<typename SeqRef>\
+        cons(support::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
+          : car(fusion::front(seq_assign.get()))\
+          , cdr(detail::assign_by_deref(),\
+                  fusion::next(fusion::begin(seq_assign.get())))\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(CONS_ASSIGN_CTOR,_);
+
+#undef CONS_ASSIGN_CTOR
+
         /*
         template<typename Seq>
         vector(typename enable_if_c<sizeof...(Elements)!=1,
@@ -141,25 +158,16 @@
         */
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
-        explicit cons(Car const& car)
-          : car(car), cdr()
-        {}
-
-        cons(Car const& car, Cdr const& cdr)
-          : car(car), cdr(cdr)
+        cons(typename call_traits<Car>::param_type car,Cdr const& cdr)
+          : car(car)
+          , cdr(cdr)
         {}
 #else
-        template<typename OtherCar>
-        explicit cons(OtherCar&& other_car,
-                typename disable_if<is_sequence_assign<OtherCar> >::type* =NULL)
-          : car(std::forward<OtherCar>(other_car))
-          , cdr()
-        {}
-
         template<typename OtherCar,typename OtherCdr>
-        cons(OtherCar&& other_car,OtherCdr&& other_cdr)
-          : car(std::forward<OtherCar>(other_car))
-          , cdr(std::forward<OtherCdr>(other_cdr))
+        cons(BOOST_FUSION_R_ELSE_CLREF(OtherCar) car,
+             BOOST_FUSION_R_ELSE_CLREF(OtherCdr) cdr)
+          : car(BOOST_FUSION_FORWARD(OtherCar,car))
+          , cdr(BOOST_FUSION_FORWARD(OtherCdr,cdr))
         {}
 #endif
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/convert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/convert.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/convert.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,37 +8,12 @@
 #ifndef BOOST_FUSION_CONTAINER_LIST_CONVERT_HPP
 #define BOOST_FUSION_CONTAINER_LIST_CONVERT_HPP
 
-#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/container/list/list.hpp>
 
-#include <boost/fusion/container/list/detail/list/convert_impl.hpp>
-
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename Seq>
-        struct as_list
-        {
-            typedef typename
-                extension::convert_impl<list_tag>::
-                    template apply<typename detail::add_lref<Seq>::type>
-            gen;
-
-            typedef typename gen::type type;
-        };
-    }
-
-    template <typename Seq>
-    inline typename result_of::as_list<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
-    as_list(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-    {
-        typedef typename
-            result_of::as_list<BOOST_FUSION_R_ELSE_CLREF(Seq)>::gen
-        gen;
-
-        return gen::call(seq);
-    }
-
-}}
+#define BOOST_FUSION_SEQ_NAME list
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_LIST_SIZE
+#include <boost/fusion/container/detail/convert_impl.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/convert_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/convert_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,54 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_CONVERT_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_CONVERT_IMPL_HPP
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/container/list/detail/list/pp/as_list.hpp>
-#   include <boost/fusion/sequence/intrinsic/begin.hpp>
-#   include <boost/fusion/sequence/intrinsic/size.hpp>
-#else
-#   include <boost/fusion/container/list/detail/list/variadic_templates/as_list_impl.hpp>
-#endif
-
-namespace boost { namespace fusion { namespace extension
-{
-    template <typename T>
-    struct convert_impl;
-
-    template <>
-    struct convert_impl<list_tag>
-    {
-        template <typename SeqRef>
-        struct apply
-        {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-            typedef typename
-                detail::as_list<result_of::size<Seq>::value>
-            gen;
-            typedef typename gen::template apply<
-                typename result_of::begin<Seq>::type>::type
-            type;
-
-            static type call(SeqRef seq)
-            {
-                return gen::call(
-                    fusion::begin(BOOST_FUSION_FORWARD(SeqRef,seq)));
-            }
-#else
-            typedef typename detail::as_list_impl<SeqRef> gen;
-            typedef typename gen::apply::type type;
-
-            static type call(SeqRef seq)
-            {
-                return gen::call(seq);
-            }
-#endif
-        };
-    };
-}}}
-
-#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -19,6 +19,10 @@
 #include <boost/fusion/container/list/detail/list/at_impl.hpp>
 #include <boost/fusion/container/list/detail/list/value_at_impl.hpp>
 
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#endif
+
 namespace boost { namespace fusion
 {
     struct fusion_sequence_tag;
@@ -28,7 +32,7 @@
 
     VARIADIC_TEMPLATE(FUSION_MAX_LIST_SIZE)
     struct list
-      : sequence_base<list<EXPAND_ARGUMENTS(FUSION_MAX_LIST_SIZE)> >
+      : sequence_base<list<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_LIST_SIZE)> >
     {
         typedef forward_traversal_tag category;
 
@@ -36,7 +40,7 @@
         typedef fusion_sequence_tag tag; // this gets picked up by MPL
         typedef mpl::false_ is_view;
 
-        typedef vector<EXPAND_ARGUMENTS(FUSION_MAX_LIST_SIZE)> storage_type;
+        typedef vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_LIST_SIZE)> storage_type;
         typedef typename storage_type::size size;
 
         list()
@@ -52,12 +56,11 @@
 #undef LIST_CTOR
 
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
-        template <typename Arg>
-        list(BOOST_FUSION_R_ELSE_CLREF(Arg) arg)
-          : data(BOOST_FUSION_FORWARD(Arg,arg))
-        {}
-
-#   include <boost/fusion/container/list/detail/list/pp/list_forward_ctor.hpp>
+#   define BOOST_FUSION_SEQ_NAME list
+#   define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_LIST_SIZE
+#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#   undef BOOST_FUSION_MAX_SEQ_SIZE
+#   undef BOOST_FUSION_SEQ_NAME
 #else
         template <typename... OtherArguments>
         list(BOOST_FUSION_R_ELSE_CLREF(OtherArguments)... other_arguments)
@@ -77,7 +80,6 @@
         storage_type const& get_data() const { return data; }
 
     private:
-
         storage_type data;
     };
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/convert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/convert.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/convert.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,37 +8,12 @@
 #ifndef BOOST_FUSION_CONTAINER_MAP_CONVERT_HPP
 #define BOOST_FUSION_CONTAINER_MAP_CONVERT_HPP
 
-#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/container/map/map.hpp>
 
-#include <boost/fusion/container/map/detail/convert_impl.hpp>
-
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename Seq>
-        struct as_map
-        {
-            typedef typename
-                extension::convert_impl<map_tag>::
-                    template apply<typename detail::add_lref<Seq>::type>
-            gen;
-
-            typedef typename gen::apply::type type;
-        };
-    }
-
-    template <typename Seq>
-    inline typename result_of::as_map<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
-    as_map(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-    {
-        typedef typename
-            result_of::as_map<BOOST_FUSION_R_ELSE_CLREF(Seq)>::gen
-        gen;
-
-        return gen::call(seq);
-    }
-
-}}
+#define BOOST_FUSION_SEQ_NAME map
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_MAP_SIZE
+#include <boost/fusion/container/detail/convert_impl.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/convert_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/convert_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,56 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_MAP_DETAIL_CONVERT_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_CONVERT_IMPL_HPP
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/sequence/intrinsic/begin.hpp>
-#   include <boost/fusion/sequence/intrinsic/size.hpp>
-#   include <boost/fusion/container/map/detail/pp/as_map.hpp>
-#else
-#   include <boost/fusion/container/map/detail/variadic_templates/as_map_impl.hpp>
-#endif
-
-namespace boost { namespace fusion { namespace extension
-{
-    template <typename T>
-    struct convert_impl;
-
-    template <>
-    struct convert_impl<map_tag>
-    {
-        template <typename SeqRef>
-        struct apply
-        {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-            typedef typename
-                detail::as_map<result_of::size<SeqRef>::value>
-            gen;
-            typedef typename
-                gen::template apply<
-                    typename result_of::begin<SeqRef>::type
-                >::type
-            type;
-
-            static type call(SeqRef seq)
-            {
-                return gen::call(
-                        fusion::begin(BOOST_FUSION_FORWARD(Sequence,seq)));
-            }
-#else
-            typedef typename detail::as_map_impl<SeqRef> gen;
-            typedef typename gen::apply::type type;
-
-            static type call(SeqRef seq)
-            {
-                return gen::call(seq);
-            }
-#endif
-        };
-    };
-}}}
-
-#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/pp/as_map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/pp/as_map.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,102 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_MAP_DETAIL_PP_AS_MAP_HPP
-#define BOOST_FUSION_CONTAINER_MAP_DETAIL_PP_AS_MAP_HPP
-
-#include <boost/fusion/container/map/map.hpp>
-#include <boost/fusion/iterator/value_of.hpp>
-#include <boost/fusion/iterator/deref.hpp>
-#include <boost/fusion/iterator/next.hpp>
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/inc.hpp>
-#include <boost/preprocessor/dec.hpp>
-
-namespace boost { namespace fusion { namespace detail
-{
-    template <int size>
-    struct as_map;
-
-    template <>
-    struct as_map<0>
-    {
-        template <typename Iterator>
-        struct apply
-        {
-            typedef map<> type;
-        };
-
-        template <typename Iterator>
-        static typename apply<Iterator>::type
-        call(Iterator)
-        {
-            return map<>();
-        }
-    };
-
-#define BOOST_FUSION_NEXT_ITERATOR(z, n, data)                                  \
-    typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type          \
-        BOOST_PP_CAT(I, BOOST_PP_INC(n));
-
-#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data)                             \
-    typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n))                              \
-        BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
-
-#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data)                              \
-    typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type      \
-        BOOST_PP_CAT(T, n);
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/map/detail/as_map.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_NEXT_ITERATOR
-#undef BOOST_FUSION_NEXT_CALL_ITERATOR
-#undef BOOST_FUSION_VALUE_OF_ITERATOR
-
-}}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    template <>
-    struct as_map<N>
-    {
-        template <typename I0>
-        struct apply
-        {
-            BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
-            BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
-            typedef map<BOOST_PP_ENUM_PARAMS(N, T)> type;
-        };
-
-        template <typename It>
-        static typename apply<Iterator>::type
-        call(It const& it0)
-        {
-            typedef apply<It> gen;
-            BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _)
-            return typename gen::type(
-                    BOOST_PP_ENUM_PARAMS(N, fusion::deref(i)));
-        }
-    };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -36,6 +36,10 @@
 #include <boost/fusion/container/map/detail/at_key_impl.hpp>
 #include <boost/fusion/container/map/detail/value_at_key_impl.hpp>
 
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#endif
+
 namespace boost { namespace fusion
 {
     struct fusion_sequence_tag;
@@ -44,7 +48,8 @@
 #endif
 
     VARIADIC_TEMPLATE(FUSION_MAX_MAP_SIZE)
-    struct map : sequence_base<map<EXPAND_ARGUMENTS(FUSION_MAX_MAP_SIZE)> >
+    struct map
+      : sequence_base<map<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_MAP_SIZE)> >
     {
         struct category : forward_traversal_tag, associative_sequence_tag {};
 
@@ -52,7 +57,9 @@
         typedef fusion_sequence_tag tag; // this gets picked up by MPL
         typedef mpl::false_ is_view;
 
-        typedef vector<EXPAND_ARGUMENTS(FUSION_MAX_MAP_SIZE)> storage_type;
+        typedef
+            vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_MAP_SIZE)>
+        storage_type;
         typedef typename storage_type::size size;
 
 private:
@@ -132,20 +139,18 @@
 #define MAP_CTOR(COMBINATION,_)\
         map(map COMBINATION map_)\
           : data(BOOST_FUSION_FORWARD(map COMBINATION,map_).data)\
-        {\
-        }
+        {}
 
         BOOST_FUSION_ALL_CV_REF_COMBINATIONS(MAP_CTOR,_)
 
 #undef MAP_CTOR
 
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
-        template <typename Arg>
-        map(BOOST_FUSION_R_ELSE_CLREF(Arg) arg)
-            : data(BOOST_FUSION_FORWARD(Arg,arg))
-        {}
-
-#   include <boost/fusion/container/map/detail/pp/map_forward_ctor.hpp>
+#   define BOOST_FUSION_SEQ_NAME map
+#   define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_MAP_SIZE
+#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#   undef BOOST_FUSION_MAX_SEQ_SIZE
+#   undef BOOST_FUSION_SEQ_NAME
 #else
         template <typename... OtherArguments>
         map(BOOST_FUSION_R_ELSE_CLREF(OtherArguments)... other_arguments)
@@ -161,7 +166,6 @@
             return *this;
         }
 
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
         template <typename Key>
         typename meta_find_impl_const<Key>::type
         find_impl(mpl::identity<Key>) const
@@ -193,13 +197,11 @@
             return data.at_impl(
                     typename meta_find_impl_const<Key>::type::index()).second;
         }
-#endif
 
         storage_type& get_data() { return data; }
         storage_type const& get_data() const { return data; }
 
     private:
-
         storage_type data;
     };
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/convert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/convert.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/convert.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,37 +8,12 @@
 #ifndef BOOST_FUSION_CONTAINER_SET_CONVERT_HPP
 #define BOOST_FUSION_CONTAINER_SET_CONVERT_HPP
 
-#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/container/set/set.hpp>
 
-#include <boost/fusion/container/set/detail/convert_impl.hpp>
-
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename Seq>
-        struct as_set
-        {
-            typedef typename
-                extension::convert_impl<set_tag>::
-                    template apply<typename detail::add_lref<Seq>::type>
-            gen;
-
-            typedef typename gen::apply::type type;
-        };
-    }
-
-    template <typename Seq>
-    inline typename result_of::as_set<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
-    as_set(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-    {
-        typedef typename
-            result_of::as_set<BOOST_FUSION_R_ELSE_CLREF(Seq)>::gen
-        gen;
-
-        return gen::call(seq);
-    }
-
-}}
+#define BOOST_FUSION_SEQ_NAME set
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_SET_SIZE
+#include <boost/fusion/container/detail/convert_impl.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/convert_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/convert_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,55 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_CONVERT_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_SET_DETAIL_CONVERT_IMPL_HPP
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/sequence/intrinsic/begin.hpp>
-#   include <boost/fusion/sequence/intrinsic/size.hpp>
-#   include <boost/fusion/container/set/detail/pp/as_set.hpp>
-#else
-#   include <boost/fusion/container/set/detail/variadic_templates/as_set_impl.hpp>
-#endif
-
-namespace boost { namespace fusion { namespace extension
-{
-    template <typename T>
-    struct convert_impl;
-
-    template <>
-    struct convert_impl<set_tag>
-    {
-        template <typename SeqRef>
-        struct apply
-        {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-            typedef typename
-                detail::as_set<result_of::size<SeqRef>::value>
-            gen;
-            typedef typename gen::template apply<
-                typename result_of::begin<SeqRef>::type>::type
-            type;
-
-            static type call(SeqRef seq)
-            {
-                return gen::call(
-                        fusion::begin(BOOST_FUSION_FORWARD(Sequence,seq)));
-            }
-#else
-            typedef typename detail::as_set_impl<SeqRef> gen;
-
-            typedef typename gen::apply::type type;
-
-            static type call(SeqRef seq)
-            {
-                return gen::call(seq);
-            }
-#endif
-        };
-    };
-}}}
-
-#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/as_set.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/as_set.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,102 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_PP_AS_SET_HPP
-#define BOOST_FUSION_CONTAINER_SET_DETAIL_PP_AS_SET_HPP
-
-#include <boost/fusion/container/set/set.hpp>
-#include <boost/fusion/iterator/value_of.hpp>
-#include <boost/fusion/iterator/deref.hpp>
-#include <boost/fusion/iterator/next.hpp>
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/inc.hpp>
-#include <boost/preprocessor/dec.hpp>
-
-namespace boost { namespace fusion { namespace detail
-{
-    template <int size>
-    struct as_set;
-
-    template <>
-    struct as_set<0>
-    {
-        template <typename Iterator>
-        struct apply
-        {
-            typedef set<> type;
-        };
-
-        template <typename Iterator>
-        static typename apply<Iterator>::type
-        call(Iterator)
-        {
-            return set<>();
-        }
-    };
-
-#define BOOST_FUSION_NEXT_ITERATOR(z, n, data)                                  \
-    typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type          \
-        BOOST_PP_CAT(I, BOOST_PP_INC(n));
-
-#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data)                             \
-    typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n))                              \
-        BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
-
-#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data)                              \
-    typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type      \
-        BOOST_PP_CAT(T, n);
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/set/detail/as_set.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_SET_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_NEXT_ITERATOR
-#undef BOOST_FUSION_NEXT_CALL_ITERATOR
-#undef BOOST_FUSION_VALUE_OF_ITERATOR
-
-}}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    template <>
-    struct as_set<N>
-    {
-        template <typename I0>
-        struct apply
-        {
-            BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
-            BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
-            typedef set<BOOST_PP_ENUM_PARAMS(N, T)> type;
-        };
-
-        template <typename It>
-        static typename apply<It>::type
-        call(It const& it0)
-        {
-            typedef apply<Iterator> gen;
-            BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _)
-            return typename gen::type(
-                    BOOST_PP_ENUM_PARAMS(N, fusion::deref(i)));
-        }
-    };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/set_forward_ctor.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/set_forward_ctor.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/set_forward_ctor.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -5,6 +5,7 @@
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
+#ifndef BOOST_PP_IS_ITERATING
 #ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_PP_SET_FORWARD_CTOR_HPP
 #define BOOST_FUSION_CONTAINER_SET_DETAIL_PP_SET_FORWARD_CTOR_HPP
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -30,6 +30,9 @@
 #include <boost/fusion/container/set/detail/at_key_impl.hpp>
 #include <boost/fusion/container/set/detail/value_at_key_impl.hpp>
 
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#endif
 
 namespace boost { namespace fusion
 {
@@ -40,7 +43,7 @@
 
     VARIADIC_TEMPLATE(FUSION_MAX_SET_SIZE)
     struct set
-      : sequence_base<set<EXPAND_ARGUMENTS(FUSION_MAX_SET_SIZE)> >
+      : sequence_base<set<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_SET_SIZE)> >
     {
         struct category : forward_traversal_tag, associative_sequence_tag {};
 
@@ -48,7 +51,7 @@
         typedef fusion_sequence_tag tag; // this gets picked up by MPL
         typedef mpl::false_ is_view;
 
-        typedef vector<EXPAND_ARGUMENTS(FUSION_MAX_SET_SIZE)> storage_type;
+        typedef vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_SET_SIZE)> storage_type;
         typedef typename storage_type::size size;
 
         template <typename Key>
@@ -106,20 +109,18 @@
 #define SET_CTOR(COMBINATION,_)\
         set(set COMBINATION set_)\
           : data(BOOST_FUSION_FORWARD(set COMBINATION,set_).data)\
-        {\
-        }
+        {}
 
         BOOST_FUSION_ALL_CV_REF_COMBINATIONS(SET_CTOR,_)
 
 #undef SET_CTOR
 
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
-        template <typename Arg>
-        set(BOOST_FUSION_R_ELSE_CLREF(Arg) arg)
-            : data(BOOST_FUSION_FORWARD(Arg,arg))
-        {}
-
-#   include <boost/fusion/container/set/detail/pp/set_forward_ctor.hpp>
+#   define BOOST_FUSION_SEQ_NAME set
+#   define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_SET_SIZE
+#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#   undef BOOST_FUSION_MAX_SEQ_SIZE
+#   undef BOOST_FUSION_SEQ_NAME
 #else
         template <typename... OtherArguments>
         set(BOOST_FUSION_R_ELSE_CLREF(OtherArguments)... other_arguments)
@@ -135,7 +136,6 @@
             return *this;
         }
 
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
         template <typename Key>
         typename meta_find_impl_const<Key>::type
         find_impl(mpl::identity<Key>) const
@@ -164,7 +164,6 @@
             return data.at_impl(
                     typename meta_find_impl_const<Key>::type::index());
         }
-#endif
 
         storage_type& get_data() { return data; }
         storage_type const& get_data() const { return data; }
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/convert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/convert.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/convert.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,36 +8,12 @@
 #ifndef BOOST_FUSION_CONTAINER_VECTOR_CONVERT_HPP
 #define BOOST_FUSION_CONTAINER_VECTOR_CONVERT_HPP
 
-#include <boost/fusion/container/vector/detail/convert_impl.hpp>
-#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
 
-namespace boost { namespace fusion
-{
-    namespace result_of
-    {
-        template <typename Seq>
-        struct as_vector
-        {
-            typedef typename
-                extension::convert_impl<vector_tag>::
-                    template apply<typename detail::add_lref<Seq>::type>
-            gen;
-
-            typedef typename gen::type type;
-        };
-    }
-
-    template <typename Seq> inline typename
-        result_of::as_vector<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
-    as_vector(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-    {
-        typedef typename
-            result_of::as_vector<BOOST_FUSION_R_ELSE_CLREF(Seq)>::gen
-        gen;
-
-        return gen::call(seq);
-    }
-
-}}
+#define BOOST_FUSION_SEQ_NAME vector
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
+#include <boost/fusion/container/detail/convert_impl.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/convert_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/convert_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,55 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_CONVERT_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_CONVERT_IMPL_HPP
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/sequence/intrinsic/begin.hpp>
-#   include <boost/fusion/sequence/intrinsic/size.hpp>
-#   include <boost/fusion/container/vector/detail/pp/as_vector.hpp>
-#else
-#   include <boost/fusion/container/vector/detail/variadic_templates/as_vector_impl.hpp>
-#endif
-
-namespace boost { namespace fusion { namespace extension
-{
-    template <typename T>
-    struct convert_impl;
-
-    template <>
-    struct convert_impl<vector_tag>
-    {
-        template <typename SeqRef>
-        struct apply
-        {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-            typedef typename
-                detail::as_vector<result_of::size<SeqRef>::value>
-            gen;
-
-            typedef typename gen::template apply<
-                typename result_of::begin<SeqRef>::type>::type
-            type;
-
-            static type call(SeqRef seq)
-            {
-                return gen::call(
-                        fusion::begin(BOOST_FUSION_FORWARD(Sequence,seq)));
-            }
-#else
-            typedef typename detail::as_vector_impl<SeqRef> gen;
-            typedef typename gen::apply::type type;
-
-            static type call(SeqRef seq)
-            {
-                return gen::call(seq);
-            }
-#endif
-        };
-    };
-}}}
-
-#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/as_vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/as_vector.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,85 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_AS_VECTOR_HPP
-#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_AS_VECTOR_HPP
-
-#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/iterator/value_of.hpp>
-#include <boost/fusion/iterator/deref.hpp>
-#include <boost/fusion/iterator/next.hpp>
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/inc.hpp>
-#include <boost/preprocessor/dec.hpp>
-
-namespace boost { namespace fusion { namespace detail
-{
-    template <int size>
-    struct as_vector;
-
-#define BOOST_FUSION_NEXT_ITERATOR(z, n, data)                                  \
-    typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type          \
-        BOOST_PP_CAT(I, BOOST_PP_INC(n));
-
-#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data)                             \
-    typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n))                              \
-        BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
-
-#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data)                              \
-    typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type      \
-        BOOST_PP_CAT(T, n);
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/pp/as_vector.hpp>
-#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_NEXT_ITERATOR
-#undef BOOST_FUSION_NEXT_CALL_ITERATOR
-#undef BOOST_FUSION_VALUE_OF_ITERATOR
-
-}}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    template <>
-    struct as_vector<N>
-    {
-        template <typename I0>
-        struct apply
-        {
-            BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
-            BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
-            typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> type;
-        };
-
-        template <typename It>
-        static typename apply<It>::type
-        call(It const& it0)
-        {
-            typedef apply<It> gen;
-            BOOST_PP_REPEAT(BOOST_PP_DEC(N), BOOST_FUSION_NEXT_CALL_ITERATOR, _)
-            return typename gen::type(
-                    BOOST_PP_ENUM_PARAMS(N, fusion::deref(i)));
-        }
-    };
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Added: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,89 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_HPP
+#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_HPP
+
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/container/vector/detail/vector_iterator.hpp>
+#include <boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp>
+
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+#include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+
+namespace boost { namespace fusion
+{
+    struct fusion_sequence_tag;
+
+    VARIADIC_TEMPLATE(FUSION_MAX_VECTOR_SIZE)
+    struct vector
+      : sequence_base<vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_VECTOR_SIZE)> >
+    {
+        typedef typename
+            detail::vector_n_chooser<
+                EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_VECTOR_SIZE)
+            >::type
+        vector_n;
+
+        typedef typename vector_n::fusion_tag fusion_tag;
+        typedef typename vector_n::tag tag;
+        typedef typename vector_n::size size;
+        typedef typename vector_n::category category;
+        typedef typename vector_n::is_view is_view;
+
+        typedef typename vector_n::types types;
+        typedef vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_VECTOR_SIZE)> self_type;
+
+        vector()
+        {}
+
+#define VECTOR_CTOR(COMBINATION,_)\
+        vector(self_type COMBINATION vec)\
+          : data(BOOST_FUSION_FORWARD(self_type COMBINATION,vec).data)\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(VECTOR_CTOR,_);
+
+#undef VECTOR_CTOR
+
+#define BOOST_FUSION_SEQ_NAME vector
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
+        #include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
+
+        template <typename Seq>
+        vector&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+        {
+            data = BOOST_FUSION_FORWARD(Seq,seq);
+            return *this;
+        }
+
+        template <typename I>
+        typename detail::add_lref<typename mpl::at<types, I>::type>::type
+        at_impl(I)
+        {
+            return data.at_impl(I());
+        }
+
+        template <typename I>
+        typename detail::add_lref<
+            typename add_const<typename mpl::at<types, I>::type>::type
+        >::type
+        at_impl(I) const
+        {
+            return data.at_impl(I());
+        }
+
+        vector_n data;
+    };
+}}
+
+#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_forward_ctor.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_forward_ctor.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,38 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_FORWARD_CTOR_HPP
-#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_FORWARD_CTOR_HPP
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_FILENAME_1 \
-    <boost/fusion/container/vector/detail/pp/vector_forward_ctor.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-#if N == 1
-    explicit
-#endif
-    vector(BOOST_PP_ENUM_BINARY_PARAMS(N, const T,& _))
-      : vec(BOOST_PP_ENUM_PARAMS(N, _)) {}
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -25,7 +25,6 @@
 
 #   include <boost/mpl/int.hpp>
 #   include <boost/mpl/bool.hpp>
-#   include <boost/mpl/vector.hpp>
 #   include <boost/mpl/at.hpp>
 
 #   include <boost/type_traits/add_const.hpp>
@@ -78,9 +77,9 @@
 #   define BOOST_FUSION_DEFAULT_MEMBER_INIT(Z, N, _) BOOST_PP_CAT(m,N)()
 
         BOOST_PP_CAT(vector, N)()
-#if N
+#   if N
           : BOOST_PP_ENUM(N, BOOST_FUSION_DEFAULT_MEMBER_INIT, _)
-#endif
+#   endif
         {}
 
 #   undef BOOST_FUSION_DEFAULT_MEMBER_INIT
@@ -120,14 +119,20 @@
         BOOST_PP_CAT(m,N)(\
             BOOST_FUSION_FORWARD(BOOST_PP_CAT(A,N), BOOST_PP_CAT(_,N)))
 
+#ifndef BOOST_NO_RVALUE_REFERENCES
         template <BOOST_PP_ENUM_PARAMS(N, typename A)>
+#endif
 #       if (N == 1)
         explicit
 #       endif
         BOOST_PP_CAT(vector, N)(
             BOOST_PP_ENUM_BINARY_PARAMS(
                     N,
+#ifdef BOOST_NO_RVALUE_REFERENCES
+                    T,
+#else
                     A,
+#endif
                     BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()) _)
             )
           : BOOST_PP_ENUM(N, BOOST_FUSION_MEMBER_INIT, _)
@@ -136,38 +141,52 @@
 #       undef BOOST_FUSION_MEMBER_INIT
 #   endif
 
-#   define BOOST_FUSION_MEMBER_INIT(Z, N, _)\
-        BOOST_PP_CAT(m,N)(\
-            fusion::deref(fusion::advance_c<N>(fusion::begin(seq.get()))))
-
-        template<typename SeqAssign>
-        BOOST_PP_CAT(vector,N)(BOOST_FUSION_R_ELSE_LREF(SeqAssign) seq,
-               typename enable_if<
-                   is_sequence_assign<SeqAssign> >::type* =NULL)
 #   if N
-          : BOOST_PP_ENUM(N, BOOST_FUSION_MEMBER_INIT, _)
-#   endif
+#       define BOOST_FUSION_MEMBER_INIT(Z, N, _)\
+        BOOST_PP_CAT(m,N)(fusion::deref(\
+            fusion::advance_c<N>(fusion::begin(seq_assign.get()))))
+#       define VECTOR_ASSIGN_CTOR(COMBINATION,_)\
+        template<typename SeqRef>\
+        BOOST_PP_CAT(vector,N)(\
+            support::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
+          : BOOST_PP_ENUM(N, BOOST_FUSION_MEMBER_INIT, _)\
         {}
 
-#   undef BOOST_FUSION_MEMBER_INIT
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(VECTOR_ASSIGN_CTOR,_);
+
+#       undef VECTOR_ASSIGN_CTOR
+#       undef BOOST_FUSION_MEMBER_INIT
+#   else
+#       define VECTOR_ASSIGN_CTOR(COMBINATION,_)\
+        template<typename SeqRef>\
+        BOOST_PP_CAT(vector,N)(\
+            support::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(VECTOR_ASSIGN_CTOR,_);
+
+#       undef VECTOR_ASSIGN_CTOR
+#   endif
 
         template <typename Seq>
         BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>&
-        operator=(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
         {
 #   if N
             typedef typename
-                result_of::begin<BOOST_FUSION_R_ELSE_LREF(Seq)>::type
+                result_of::begin<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
             It0;
             It0 it0 = fusion::begin(seq);
 
+            m0=fusion::deref(it0);
+
 #       define BOOST_FUSION_DEREF_MEMBER_ASSIGN(Z, N, _)\
             typedef typename\
                 result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
             BOOST_PP_CAT(It, N);\
             BOOST_PP_CAT(It, N) BOOST_PP_CAT(it, N)=\
                 fusion::next(BOOST_PP_CAT(it, BOOST_PP_DEC(N)));\
-                \
+            \
             BOOST_PP_CAT(m, N) = fusion::deref(BOOST_PP_CAT(it, N));
 
             BOOST_PP_REPEAT_FROM_TO(1, N, BOOST_FUSION_DEREF_MEMBER_ASSIGN, _)
@@ -178,6 +197,20 @@
             return *this;
         }
 
+        BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>&
+        operator=(BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>const& seq)
+        {
+#ifdef BOOST_NO_RVALUE_REFERENCES
+            return this->operator=<
+                    BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>
+                >(seq);
+#else
+            return this->operator=<
+                    BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> const&
+                >(seq);
+#endif
+        }
+
         template<typename I>
         typename detail::add_lref<typename mpl::at<types, I>::type>::type
         at_impl(I)
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/as_vector_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/as_vector_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,44 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_VARIADIC_TEMPLATES_AS_VECTOR_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_VARIADIC_TEMPLATES_AS_VECTOR_IMPL_HPP
-
-#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/mpl/begin.hpp>
-#include <boost/fusion/mpl/end.hpp>
-#include <boost/fusion/support/variadic_templates/variadic_quote.hpp>
-#include <boost/fusion/support/to_random_access_mpl_seq.hpp>
-
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/unpack_args.hpp>
-
-namespace boost { namespace fusion { namespace detail
-{
-    template<typename SeqRef>
-    struct as_vector_impl
-    {
-        struct apply
-        {
-            typedef typename
-                mpl::apply<
-                    mpl::unpack_args<variadic_quote<vector> >
-                  , typename detail::to_random_access_mpl_seq<
-                        typename detail::remove_reference<SeqRef>::type
-                    >::type
-                >::type
-            type;
-        };
-
-        static typename apply::type
-        call(SeqRef seq)
-        {
-            return typename apply::type(
-                    sequence_assign(BOOST_FUSION_FORWARD(SeqRef,seq)));
-        }
-    };
-}}}
-
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -0,0 +1,204 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_VARIADIC_TEMPLATES_VECTOR_HPP
+#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_VARIADIC_TEMPLATES_VECTOR_HPP
+
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/support/variadic_templates/variadic_arguments_to_vector.hpp>
+#include <boost/fusion/support/sequence_assign.hpp>
+#include <boost/fusion/support/assign_tags.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
+
+#include <boost/mpl/int.hpp>
+
+#include <utility>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+
+    namespace detail
+    {
+        template<int Index,typename... Elements>
+        struct vector_impl;
+
+        template<int Index>
+        struct vector_impl<Index>
+        {
+            template<int,typename...>friend struct vector_impl;
+            template<typename...>friend struct fusion::vector;
+
+        protected:
+            typedef void_ head;
+
+            vector_impl()
+            {}
+
+            vector_impl(assign_directly)
+            {}
+
+            template<typename It>
+            vector_impl(assign_by_deref,It const&)
+            {}
+
+            template<typename It>
+            void
+            assign(It const&)
+            {}
+
+            void at_impl();
+        };
+
+        template<int Index,typename Head,typename... Others>
+        struct vector_impl<Index,Head,Others...>
+          : vector_impl<Index+1,Others...>
+        {
+            template<int,typename...>friend struct vector_impl;
+            template<typename...>friend struct fusion::vector;
+
+        private:
+            typedef vector_impl<Index+1,Others...> base;
+
+        public:
+            using base::at_impl;
+
+        protected:
+            typedef Head head;
+
+        private:
+            Head _element;
+
+        protected:
+            vector_impl()
+              : _element()
+            {}
+
+            template<typename It>
+            vector_impl(assign_by_deref,It const& it)
+              : base(assign_by_deref(),fusion::next(it))
+              , _element(fusion::deref(it))
+            {}
+
+            template<typename It>
+            void
+            assign(It const& it)
+            {
+                _element=fusion::deref(it);
+                static_cast<base*>(this)->assign(fusion::next(it));
+            }
+
+            template<typename OtherHead,typename... OtherElements>
+            vector_impl(assign_directly,
+                    BOOST_FUSION_R_ELSE_CLREF(OtherHead) other_head,
+                    BOOST_FUSION_R_ELSE_CLREF(OtherElements)... other_elements)
+                : base(assign_directly(),
+                        BOOST_FUSION_FORWARD(OtherElements,other_elements)...)
+                , _element(BOOST_FUSION_FORWARD(OtherHead,other_head))
+            {}
+
+            typename detail::add_lref<Head>::type
+            at_impl(mpl::int_<Index>)
+            {
+                return _element;
+            }
+
+            typename detail::add_lref<typename add_const<Head>::type>::type
+            at_impl(mpl::int_<Index>)const
+            {
+                return _element;
+            }
+        };
+    }
+
+    template<typename... Elements>
+    struct vector
+      : sequence_base<vector<Elements...> >
+      , detail::vector_impl<0,Elements...>
+    {
+    private:
+        typedef detail::vector_impl<0,Elements...> base;
+
+    public:
+        typedef vector<Elements...> this_type;
+        typedef typename variadic_arguments_to_vector<Elements...>::type types;
+        typedef vector_tag fusion_tag;
+        typedef fusion_sequence_tag tag;
+        typedef mpl::false_ is_view;
+        typedef random_access_traversal_tag category;
+        typedef mpl::int_<sizeof...(Elements)> size;
+
+        vector()
+        {}
+
+#define VECTOR_CTOR(COMBINATION,_)\
+        vector(vector COMBINATION vec)\
+          : base(detail::assign_by_deref(),\
+                fusion::begin(BOOST_FUSION_FORWARD(vector COMBINATION,vec)))\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(VECTOR_CTOR,_)
+
+#undef VECTOR_CTOR
+
+        template<typename... OtherElements>
+        explicit
+        vector(BOOST_FUSION_R_ELSE_CLREF(OtherElements)... other_elements)
+          : base(detail::assign_directly(),
+                 BOOST_FUSION_FORWARD(OtherElements,other_elements)...)
+        {}
+
+#define VECTOR_ASSIGN_CTOR(COMBINATION,_)\
+        template<typename SeqRef>\
+        vector(support::sequence_assgin_type<SeqRef> COMBINATION seq_assign)\
+          : base(detail::assign_by_deref(),seq_assign.get())
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(VECTOR_ASSIGN_CTOR,_);
+
+#undef VECTOR_ASSIGN_CTOR
+
+        /*
+        template<typename Seq>
+        vector(typename enable_if_c<sizeof...(Elements)!=1,
+                                BOOST_FUSION_R_ELSE_CLREF(Seq)>::type seq)
+          : base(detail::assign_by_deref(),
+                 fusion::begin(BOOST_FUSION_FORWARD(Seq,seq.seq)))
+        {}
+        */
+
+        template<typename Seq>
+        vector&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+        {
+            static_cast<base*>(this)->assign(
+                fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
+            return *this;
+        }
+
+        template<typename I>
+        typename detail::add_lref<
+            typename mpl::at<types, I>::type
+        >::type
+        at_impl(I)
+        {
+            return base::at_impl(mpl::int_<I::value>());
+        }
+
+        template<typename I>
+        typename detail::add_lref<
+        typename add_const<typename mpl::at<types, I>::type>::type
+        >::type
+        at_impl(I) const
+        {
+            return base::at_impl(mpl::int_<I::value>());
+        }
+    };
+
+}}
+#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,199 +0,0 @@
-// Copyright Christopher Schmidt 2009.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_VARIADIC_TEMPLATES_VECTOR_IMPL_HPP
-#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_VARIADIC_TEMPLATES_VECTOR_IMPL_HPP
-
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/sequence/intrinsic/size.hpp>
-#include <boost/fusion/iterator/next.hpp>
-#include <boost/fusion/iterator/deref.hpp>
-#include <boost/fusion/support/variadic_templates/variadic_arguments_to_vector.hpp>
-#include <boost/fusion/support/sequence_assign.hpp>
-#include <boost/fusion/support/assign_tags.hpp>
-#include <boost/fusion/support/sequence_base.hpp>
-
-#include <boost/mpl/int.hpp>
-
-#include <utility>
-
-namespace boost { namespace fusion
-{
-    struct void_;
-
-    namespace detail
-    {
-        template<int Index,typename... Elements>
-        struct vector_impl;
-
-        template<int Index>
-        struct vector_impl<Index>
-        {
-            template<int,typename...>friend struct vector_impl;
-            template<typename...>friend struct fusion::vector;
-
-        protected:
-            typedef void_ head;
-
-            vector_impl()
-            {}
-
-            vector_impl(assign_directly)
-            {}
-
-            template<typename It>
-            vector_impl(assign_by_deref,It const&)
-            {}
-
-            template<typename It>
-            void
-            assign(It const&)
-            {}
-
-            void at_impl();
-        };
-
-        template<int Index,typename Head,typename... Others>
-        struct vector_impl<Index,Head,Others...>
-          : vector_impl<Index+1,Others...>
-        {
-            template<int,typename...>friend struct vector_impl;
-            template<typename...>friend struct fusion::vector;
-
-        private:
-            typedef vector_impl<Index+1,Others...> base;
-
-        public:
-            using base::at_impl;
-
-        protected:
-            typedef Head head;
-
-        private:
-            Head _element;
-
-        protected:
-            vector_impl()
-              : _element()
-            {}
-
-            template<typename It>
-            vector_impl(assign_by_deref,It const& it)
-              : base(assign_by_deref(),fusion::next(it))
-              , _element(fusion::deref(it))
-            {}
-
-            template<typename It>
-            void
-            assign(It const& it)
-            {
-                _element=fusion::deref(it);
-                static_cast<base*>(this)->assign(fusion::next(it));
-            }
-
-            template<typename OtherHead,typename... OtherElements>
-            vector_impl(assign_directly,
-                    BOOST_FUSION_R_ELSE_CLREF(OtherHead) other_head,
-                    BOOST_FUSION_R_ELSE_CLREF(OtherElements)... other_elements)
-                : base(assign_directly(),
-                        BOOST_FUSION_FORWARD(OtherElements,other_elements)...)
-                , _element(BOOST_FUSION_FORWARD(OtherHead,other_head))
-            {}
-
-            typename detail::add_lref<Head>::type
-            at_impl(mpl::int_<Index>)
-            {
-                return _element;
-            }
-
-            typename detail::add_lref<typename add_const<Head>::type>::type
-            at_impl(mpl::int_<Index>)const
-            {
-                return _element;
-            }
-        };
-    }
-
-    template<typename... Elements>struct vector
-      : sequence_base<vector<Elements...> >
-      , detail::vector_impl<0,Elements...>
-    {
-    private:
-        typedef detail::vector_impl<0,Elements...> base;
-
-    public:
-        typedef vector<Elements...> this_type;
-        typedef typename variadic_arguments_to_vector<Elements...>::type types;
-        typedef vector_tag fusion_tag;
-        typedef fusion_sequence_tag tag;
-        typedef mpl::false_ is_view;
-        typedef random_access_traversal_tag category;
-        typedef mpl::int_<sizeof...(Elements)> size;
-
-        vector()
-        {}
-
-#define VECTOR_CTOR(COMBINATION,_)\
-        vector(vector COMBINATION vec)\
-          : base(detail::assign_by_deref(),\
-                fusion::begin(BOOST_FUSION_FORWARD(vector COMBINATION,vec)))\
-        {}
-
-        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(VECTOR_CTOR,_)
-
-#undef VECTOR_CTOR
-
-        template<typename SeqAssign>
-        vector(BOOST_FUSION_R_ELSE_LREF(SeqAssign) seq,
-               typename enable_if<
-                   is_sequence_assign<SeqAssign> >::type* =NULL)
-          : base(detail::assign_by_deref(),fusion::begin(seq.get()))
-        {}
-
-        /*
-        template<typename Seq>
-        vector(typename enable_if_c<sizeof...(Elements)!=1,
-                                BOOST_FUSION_R_ELSE_CLREF(Seq)>::type seq)
-          : base(detail::assign_by_deref(),
-                 fusion::begin(BOOST_FUSION_FORWARD(Seq,seq.seq)))
-        {}
-        */
-
-        template<typename... OtherElements>
-        vector(BOOST_FUSION_R_ELSE_CLREF(OtherElements)... other_elements)
-          : base(detail::assign_directly(),
-                 BOOST_FUSION_FORWARD(OtherElements,other_elements)...)
-        {}
-
-        template<typename Seq>
-        vector&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-        {
-            static_cast<base*>(this)->assign(
-                fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
-            return *this;
-        }
-
-        template<typename I>
-        typename detail::add_lref<
-            typename mpl::at<types, I>::type
-        >::type
-        at_impl(I)
-        {
-            return base::at_impl(mpl::int_<I::value>());
-        }
-
-        template<typename I>
-        typename detail::add_lref<
-        typename add_const<typename mpl::at<types, I>::type>::type
-        >::type
-        at_impl(I) const
-        {
-            return base::at_impl(mpl::int_<I::value>());
-        }
-    };
-
-}}
-#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -1,9 +1,7 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
 
 #ifndef BOOST_FUSION_CONTAINER_VECTOR_VECTOR_HPP
 #define BOOST_FUSION_CONTAINER_VECTOR_VECTOR_HPP
@@ -11,129 +9,7 @@
 #include <boost/fusion/container/vector/vector_fwd.hpp>
 
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/container/vector/detail/vector_iterator.hpp>
-#include <boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp>
-
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/type_traits/is_base_of.hpp>
-#include <boost/detail/workaround.hpp>
-
-namespace boost { namespace fusion
-{
-    struct fusion_sequence_tag;
-
-    template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename T)>
-    struct vector
-      : sequence_base<vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> >
-    {
-        typedef typename
-            detail::vector_n_chooser<
-                BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)
-            >::type
-        vector_n;
-
-        typedef typename vector_n::types types;
-        typedef typename vector_n::fusion_tag fusion_tag;
-        typedef typename vector_n::tag tag;
-        typedef typename vector_n::size size;
-        typedef typename vector_n::category category;
-        typedef typename vector_n::is_view is_view;
-
-        vector()
-        {}
-
-        template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
-        vector(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs)
-          : vec(rhs.vec)
-        {}
-
-        vector(vector const& rhs)
-          : vec(rhs.vec)
-        {}
-
-        template <typename Seq>
-        vector(Seq const& rhs)
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
-          : vec(ctor_helper(rhs, is_base_of<vector, Seq>()))
-        {}
-#else
-          : vec(rhs)
-        {}
-#endif
-
-        #include <boost/fusion/container/vector/detail/pp/vector_forward_ctor.hpp>
-
-        template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
-        vector&
-        operator=(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs)
-        {
-            vec = rhs.vec;
-            return *this;
-        }
-
-        template <typename T>
-        vector&
-        operator=(T const& rhs)
-        {
-            vec = rhs;
-            return *this;
-        }
-
-        template <int N>
-        typename detail::add_lref<typename mpl::at_c<types, N>::type>::type
-        at_impl(mpl::int_<N> index)
-        {
-            return vec.at_impl(index);
-        }
-
-        //TODO???
-        template <int N>
-        typename detail::add_lref<
-            typename add_const<typename mpl::at_c<types, N>::type>::type
-        >::type
-        at_impl(mpl::int_<N> index) const
-        {
-            return vec.at_impl(index);
-        }
-
-        template <typename I>
-        typename detail::add_lref<typename mpl::at<types, I>::type>::type
-        at_impl(I index)
-        {
-            return vec.at_impl(mpl::int_<I::value>());
-        }
-
-        template<typename I>
-        typename detail::add_lref<
-            typename add_const<typename mpl::at<types, I>::type>::type
-        >::type
-        at_impl(I index) const
-        {
-            return vec.at_impl(mpl::int_<I::value>());
-        }
-
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
-        static vector_n const&
-        ctor_helper(vector const& rhs, mpl::true_)
-        {
-            return rhs.vec;
-        }
-
-        template <typename T>
-        static T const&
-        ctor_helper(T const& rhs, mpl::false_)
-        {
-            return rhs;
-        }
-#endif
-
-        vector_n vec;
-    };
-}}
+#   include <boost/fusion/container/vector/detail/pp/vector.hpp>
 #else
 #   include <boost/fusion/container/vector/vector_fwd.hpp>
 #   include <boost/fusion/support/ref.hpp>
@@ -152,7 +28,7 @@
 #   include <boost/fusion/container/vector/detail/distance_impl.hpp>
 #   include <boost/fusion/container/vector/detail/advance_impl.hpp>
 
-#   include <boost/fusion/container/vector/detail/variadic_templates/vector_impl.hpp>
+#   include <boost/fusion/container/vector/detail/variadic_templates/vector.hpp>
 #endif
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector10.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector10.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector10.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -7,6 +7,7 @@
 #define BOOST_FUSION_CONTAINER_VECTOR_VECTOR10_HPP
 
 #include <boost/config.hpp>
+#include <boost/mpl/vector/vector10.hpp>
 
 #if defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
 #   define BOOST_FUSION_FROM 0
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector20.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector20.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector20.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -7,6 +7,7 @@
 #define BOOST_FUSION_CONTAINER_VECTOR_VECTOR20_HPP
 
 #include <boost/config.hpp>
+#include <boost/mpl/vector/vector20.hpp>
 
 #if defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
 #   define BOOST_FUSION_FROM 11
@@ -23,4 +24,5 @@
 #else
 #   include <boost/fusion/container/vector/vector.hpp>
 #endif
+
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector30.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector30.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector30.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -7,6 +7,7 @@
 #define BOOST_FUSION_CONTAINER_VECTOR_VECTOR30_HPP
 
 #include <boost/config.hpp>
+#include <boost/mpl/vector/vector30.hpp>
 
 #if defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
 #   define BOOST_FUSION_FROM 21
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector40.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector40.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector40.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -7,6 +7,7 @@
 #define BOOST_FUSION_CONTAINER_VECTOR_VECTOR40_HPP
 
 #include <boost/config.hpp>
+#include <boost/mpl/vector/vector40.hpp>
 
 #if defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
 #   define BOOST_FUSION_FROM 31
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector50.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector50.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector50.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -7,6 +7,7 @@
 #define BOOST_FUSION_CONTAINER_VECTOR_VECTOR50_HPP
 
 #include <boost/config.hpp>
+#include <boost/mpl/vector/vector50.hpp>
 
 #if defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
 #   define BOOST_FUSION_FROM 41
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/decltype_and_variadic_templates/unfused_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/decltype_and_variadic_templates/unfused_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/decltype_and_variadic_templates/unfused_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -75,8 +75,9 @@
 #   define CALL_OPERATOR(COMBINATION)\
         template<typename... Args>\
         typename support::result_of<\
-            typename detail::forward_as<int COMBINATION, F>::type\
-                (typename result_of::as_vector<TransformSeq&&>::type&&)\
+            typename support::get_func_base<\
+                typename detail::forward_as<int COMBINATION, F>::type\
+            >::type(typename result_of::as_vector<TransformSeq&&>::type&&)\
         >::type\
         operator()(Args&&... args) COMBINATION\
         {\
@@ -87,8 +88,9 @@
 #   define CALL_OPERATOR(COMBINATION)\
         template<typename... Args>\
         typename support::result_of<\
-            typename detail::forward_as<int COMBINATION, F>::type\
-                (typename result_of::vector_tie<Args&&...>::type&&)\
+            typename support::get_func_base<\
+                typename detail::forward_as<int COMBINATION, F>::type\
+            >::type(typename result_of::vector_tie<TransformSeq&&>::type&&)\
         >::type\
         operator()(Args&&... args) COMBINATION\
         {\
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -30,11 +30,11 @@
 
     template<typename F>
     inline typename
-        result_of::BOOST_FUSION_FUNC_NAME<BOOST_FUSION_R_ELSE_LREF(F)>::type
-    BOOST_FUSION_FUNC_NAME(BOOST_FUSION_R_ELSE_LREF(F) f)
+        result_of::BOOST_FUSION_FUNC_NAME<BOOST_FUSION_R_ELSE_CLREF(F)>::type
+    BOOST_FUSION_FUNC_NAME(BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return typename
-            result_of::BOOST_FUSION_FUNC_NAME<BOOST_FUSION_R_ELSE_LREF(F)>::
+            result_of::BOOST_FUSION_FUNC_NAME<BOOST_FUSION_R_ELSE_CLREF(F)>::
                 type(BOOST_FUSION_FORWARD(F,f));
     }
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -24,14 +24,14 @@
 
         template<typename T>
         static inline wanted
-        do_get_pointer(BOOST_FUSION_R_ELSE_LREF(T), wanted ptr)
+        do_get_pointer(BOOST_FUSION_R_ELSE_CLREF(T), wanted ptr)
         {
             return ptr;
         }
 
         template<typename T>
         static inline wanted
-        do_get_pointer(BOOST_FUSION_R_ELSE_LREF(T) t, void const*)
+        do_get_pointer(BOOST_FUSION_R_ELSE_CLREF(T) t, void const*)
         {
             return get_pointer(BOOST_FUSION_FORWARD(T,t));
         }
@@ -51,7 +51,7 @@
 
         template <typename T>
         static inline wanted
-        get(BOOST_FUSION_R_ELSE_LREF(T) t)
+        get(BOOST_FUSION_R_ELSE_CLREF(T) t)
         {
             return do_get_pointer(
                     BOOST_FUSION_FORWARD(T,t),
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -48,19 +48,37 @@
     }
 
     template <typename N, typename Seq>
-    inline typename result_of::at<BOOST_FUSION_R_ELSE_LREF(Seq), N>::type
-    at(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+    inline typename result_of::at<BOOST_FUSION_R_ELSE_CLREF(Seq), N>::type
+    at(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
-        return result_of::at<BOOST_FUSION_R_ELSE_LREF(Seq), N>::call(seq);
+        return result_of::at<BOOST_FUSION_R_ELSE_CLREF(Seq), N>::call(seq);
     }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename N, typename Seq>
+    inline typename result_of::at<Seq&, N>::type
+    at(Seq& seq)
+    {
+        return result_of::at<Seq&, N>::call(seq);
+    }
+#endif
+
     template <int N, typename Seq>
     inline typename
-        result_of::at_c<BOOST_FUSION_R_ELSE_LREF(Seq), N>::type
-    at_c(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+        result_of::at_c<BOOST_FUSION_R_ELSE_CLREF(Seq), N>::type
+    at_c(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
         return fusion::at<mpl::int_<N> >(seq);
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <int N, typename Seq>
+    inline typename result_of::at_c<Seq&, N>::type
+    at_c(Seq& seq)
+    {
+        return fusion::at<mpl::int_<N> >(seq);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -55,6 +55,15 @@
             >::call(seq);
     }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Key, typename Seq>
+    inline typename result_of::at_key<Seq&, Key>::type
+    at_key(Seq& seq)
+    {
+        return result_of::at_key<Seq&, Key>::call(seq);
+    }
+#endif
+
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -35,6 +35,15 @@
     {
         return *fusion::prior(fusion::end(seq));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq>
+    inline typename result_of::back<Seq&>::type
+    back(Seq& seq)
+    {
+        return *fusion::prior(fusion::end(seq));
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -41,12 +41,21 @@
 
     template <typename Seq>
     inline typename
-        result_of::begin<BOOST_FUSION_R_ELSE_LREF(Seq)>::type
-    begin(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+        result_of::begin<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
+    begin(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
-        return result_of::begin<BOOST_FUSION_R_ELSE_LREF(Seq)>::call(seq);
+        return result_of::begin<BOOST_FUSION_R_ELSE_CLREF(Seq)>::call(seq);
     }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq>
+    inline typename result_of::begin<Seq&>::type
+    begin(Seq& seq)
+    {
+        return result_of::begin<Seq&>::call(seq);
+    }
+#endif
+
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -47,6 +47,15 @@
         return result_of::end<BOOST_FUSION_R_ELSE_CLREF(Seq)>::call(seq);
     }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq>
+    inline typename result_of::end<Seq&>::type
+    end(Seq& seq)
+    {
+        return result_of::end<Seq&>::call(seq);
+    }
+#endif
+
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -33,6 +33,14 @@
         return *fusion::begin(seq);
     }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename Seq>
+    inline typename result_of::front<Seq&>::type
+    front(Seq& seq)
+    {
+        return *fusion::begin(seq);
+    }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -10,7 +10,7 @@
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_SWAP_HPP
 
 #include <boost/config.hpp>
-#ifndef BOOST_NO_RVALUE_REFERENCES
+#ifdef BOOST_NO_RVALUE_REFERENCES
 #   include <boost/fusion/view/zip_view.hpp>
 #   include <boost/fusion/algorithm/iteration/for_each.hpp>
 #   include <boost/fusion/sequence/intrinsic/front.hpp>
@@ -30,8 +30,7 @@
             template<typename Elem>
             void operator()(Elem const& e) const
             {
-                using std::swap;
-                swap(front(e), back(e));
+                std::swap(fusion::front(e), fusion::back(e));
             }
         };
     }
@@ -49,10 +48,11 @@
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template<typename Seq1, typename Seq2>
     void
-    swap(Seq1& lhs, Seq2& rhs)
+    swap(Seq1& seq1, Seq2& seq2)
     {
+        //TODO zip()
         typedef vector<Seq1&, Seq2&> references;
-        for_each(zip_view<references>(references(lhs, rhs)), detail::swap());
+        for_each(zip_view<references>(references(seq1, seq2)), detail::swap());
     }
 #else
     using std::swap;
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/deduce.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/deduce.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/deduce.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -9,15 +9,51 @@
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
 
 #include <boost/config.hpp>
+#ifdef BOOST_NO_RVALUE_REFERENCES
+#   include <boost/mpl/eval_if.hpp>
+#   include <boost/mpl/identity.hpp>
+#else
+#   include <boost/mpl/if.hpp>
+#endif
 
 namespace boost { namespace fusion { namespace traits
 {
     //TODO doc!
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename T>
+    struct deduce_impl
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct deduce_impl<T const&>
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct deduce_impl<T const volatile&>
+    {
+        typedef T type;
+    };
+
+    template <typename T>
     struct deduce
-      : detail::as_fusion_element<T>
-    {};
+    {
+        typedef typename detail::as_fusion_element<T>::type element;
+
+        typedef typename
+            mpl::eval_if<
+                mpl::and_<
+                    detail::is_lrref<T>
+                  , is_same<typename detail::identity<T>::type,element>
+                >
+              , deduce_impl<T>
+              , mpl::identity<element>
+            >::type
+        type;
+    };
 #else
     template <typename T>
     struct deduce
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/detail/as_fusion_element.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/detail/as_fusion_element.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/detail/as_fusion_element.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -32,7 +32,7 @@
         typedef T& type;
     };
 
-#define CV_REF_SPECIALISATION(COMBINATION,_)\
+#define CV_REF_SPECIALIZATION(COMBINATION,_)\
     template <typename T>\
     struct as_fusion_element<T COMBINATION>\
       : as_fusion_element<T>\
@@ -44,9 +44,9 @@
         typedef T& type;\
     };
 
-    BOOST_FUSION_ALL_CV_REF_COMBINATIONS(CV_REF_SPECIALISATION,_)
+    BOOST_FUSION_ALL_CV_REF_COMBINATIONS(CV_REF_SPECIALIZATION,_)
 
-#undef CV_REF_SPECIALISATION
+#undef CV_REF_SPECIALIZATION
 
     template <typename T, int N>
     struct as_fusion_element<T(&)[N]>
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -22,11 +22,29 @@
           : second()
         {}
 
+#define PAIR_CTOR(COMBINATION,_)\
+        template<typename OtherFirst,typename OtherSecond>\
+        pair(pair<OtherFirst,OtherSecond> COMBINATION pair_)\
+          : second(static_cast<pair<OtherFirst,OtherSecond> COMBINATION>(pair_)\
+                  .second)\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(PAIR_CTOR,_)
+
+#undef PAIR_CTOR
+
+
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+        pair(Second const& second)
+          : second(second)
+        {}
+#   else
         template<typename Arg>
-        pair(BOOST_FUSION_R_ELSE_CLREF(Arg) arg)
-          : second(BOOST_FUSION_FORWARD(Arg,arg))
+        pair(Arg&& arg)
+          : second(std::forward<Arg>(arg))
         {}
+#   endif
 #else
         template<typename Arg1,typename... Args>
         pair(Arg1&& arg1, Args&&... args)
@@ -35,29 +53,6 @@
 #endif
 
         template <typename Second2>
-        pair(pair<First, Second2> const& rhs)
-          : second(rhs.second)
-        {}
-
-#ifndef BOOST_NO_RVALUE_REFERENCES
-        //TODO cschmidt: needed?
-        template <typename Second2>
-        pair(pair<First, Second2> const&& rhs)
-          : second(std::forward<const Second2>(rhs.second))
-        {}
-
-        template <typename Second2>
-        pair(pair<First, Second2>& rhs)
-          : second(rhs.second)
-        {}
-
-        template <typename Second2>
-        pair(pair<First, Second2>&& rhs)
-          : second(std::forward<Second2>(rhs.second))
-        {}
-#endif
-
-        template <typename Second2>
         pair& operator=(pair<First, Second2> const& rhs)
         {
             second = rhs.second;
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -34,8 +34,8 @@
 #ifdef BOOST_NO_RVALUE_REFERENCES
 #   include <boost/mpl/bool.hpp>
 
-#   define BOOST_FUSION_R_ELSE_CLREF(OBJECT) OBJECT const&
 #   define BOOST_FUSION_R_ELSE_LREF(OBJECT) OBJECT&
+#   define BOOST_FUSION_R_ELSE_CLREF(OBJECT) OBJECT const&
 #   define BOOST_FUSION_RREF_ELSE_OBJ(OBJECT) OBJECT
 #   define BOOST_FUSION_OBJ_ELSE_LREF(OBJECT) OBJECT&
 #   define BOOST_FUSION_OBJ_ELSE_CLREF(OBJECT) OBJECT const&
@@ -50,8 +50,8 @@
 #else
 #   include <utility>
 
-#   define BOOST_FUSION_R_ELSE_CLREF(OBJECT) OBJECT&&
 #   define BOOST_FUSION_R_ELSE_LREF(OBJECT) OBJECT&&
+#   define BOOST_FUSION_R_ELSE_CLREF(OBJECT) OBJECT&&
 #   define BOOST_FUSION_RREF_ELSE_OBJ(OBJECT) OBJECT&&
 #   define BOOST_FUSION_OBJ_ELSE_LREF(OBJECT) OBJECT
 #   define BOOST_FUSION_OBJ_ELSE_CLREF(OBJECT) OBJECT
@@ -171,38 +171,40 @@
     template <typename TestType,typename Type>
     struct forward_as
     {
+        typedef typename remove_reference<TestType>::type test_type;
+
         typedef typename
-            mpl::if_<is_const<typename remove_reference<TestType>::type>
-                   , typename add_const<Type>::type
-                   , Type
+            mpl::if_<is_const<test_type>
+               , typename add_const<Type>::type
+               , Type
             >::type
         const_type;
 
         typedef typename
-            mpl::if_<is_volatile<typename remove_reference<TestType>::type>
-                   , typename add_volatile<const_type>::type
-                   , const_type
+            mpl::if_<is_volatile<test_type>
+               , typename add_volatile<const_type>::type
+               , const_type
             >::type
-        real_type;
+        cv_type;
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
-        typedef real_type& type;
+        typedef cv_type& type;
 #else
         typedef typename
             mpl::eval_if<
                 //8.5.3p5...
                 mpl::or_<is_class<Type>
-                       , is_array<Type>
-                         //cschmidt: workaround until Boost.type_traits supports
-                         //rvalue refs!
-                       , mpl::not_<is_rref<TestType> >
+                  , is_array<Type>
+                    //cschmidt: workaround until Boost.type_traits supports
+                    //rvalue refs!
+                  , mpl::not_<is_rref<TestType> >
                 >,
                 mpl::eval_if<
-                         is_rref<TestType>
-                       , mpl::identity<real_type&&>
-                       , detail::add_lref<real_type>
+                    is_rref<TestType>
+                  , mpl::identity<cv_type&&>
+                  , detail::add_lref<cv_type>
                 >,
-                mpl::identity<real_type>
+                mpl::identity<cv_type>
             >::type
         type;
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/result_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/result_of.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/result_of.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -12,20 +12,19 @@
 //Therefore we emulate the old behavior if (and only if) the boost
 //implementation falls back to decltype by default.
 
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/mpl/bool.hpp>
-#else
-#   include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/ref.hpp>
 
-#   include <boost/type_traits/remove_pointer.hpp>
-#   include <boost/type_traits/is_function.hpp>
-#   include <boost/type_traits/is_member_function_pointer.hpp>
-#endif
-#if !defined(BOOST_NO_DECLTYPE) && !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+
+#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
+#   include <boost/mpl/if.hpp>
+#else
 #   include <boost/fusion/support/ref.hpp>
 
-#   include <boost/mpl/has_xxx.hpp>
 #   include <boost/mpl/eval_if.hpp>
+#   include <boost/mpl/has_xxx.hpp>
 
 #   include <boost/type_traits/is_function.hpp>
 #endif
@@ -136,7 +135,34 @@
 
 #if defined(BOOST_NO_DECLTYPE) || defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
     using boost::result_of;
+
+    template<typename FRef>
+    struct get_func_base
+    {
+        typedef typename
+            remove_pointer<
+                typename detail::identity<FRef>::type
+            >::type
+        f;
+
+        typedef typename
+            mpl::if_<
+                mpl::or_<
+                    typename is_function<f>::type
+                  , typename is_member_function_pointer<f>::type
+                >
+              , FRef
+              , f
+            >::type
+        type;
+    };
 #else
+    template<typename F>
+    struct get_func_base
+    {
+        typedef F f;
+    };
+
     namespace detail
     {
         BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)
@@ -184,7 +210,7 @@
         typedef typename
             mpl::eval_if<
                 is_function<f>
-              , boost::result_of<F(Args...)>
+              , boost::result_of<f(Args...)>
               , detail::result_of_class_type<F,f,Args...>
             >::type
         type;
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -13,13 +13,13 @@
 
 namespace boost{namespace fusion{
 
-    namespace detail
+    namespace support
     {
         template<typename Seq>
         struct sequence_assign_type
         {
-            sequence_assign_type(Seq seq_):
-                seq(seq_)
+            sequence_assign_type(Seq seq)
+              : seq(seq)
             {
             }
 
@@ -33,36 +33,9 @@
         };
     }
 
-    template<typename>
-    struct is_sequence_assign
-      : mpl::false_
-    {
-    };
-
-    template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq> >
-       : mpl::true_
-    {
-    };
-
-#   define IS_SEQUENCE_ASSIGN_SPECIALIZATION(COMBINATION,_)\
-    template<typename Seq>\
-    struct is_sequence_assign<detail::sequence_assign_type<Seq> COMBINATION>\
-      : mpl::true_\
-    {\
-    };
-
-    BOOST_FUSION_ALL_CV_REF_COMBINATIONS(IS_SEQUENCE_ASSIGN_SPECIALIZATION,_);
-
-#   undef IS_SEQUENCE_ASSIGN
-
     template<typename Seq>
-    typename mpl::if_<
-        is_sequence_assign<BOOST_FUSION_R_ELSE_LREF(Seq)>
-      , BOOST_FUSION_R_ELSE_LREF(Seq)
-      , detail::sequence_assign_type<BOOST_FUSION_R_ELSE_LREF(Seq)>
-    >::type
-    sequence_assign(BOOST_FUSION_R_ELSE_LREF(Seq) seq)
+    support::sequence_assign_type<BOOST_FUSION_R_ELSE_CLREF(Seq)>
+    sequence_assign(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
         return seq;
     }
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,20 +8,58 @@
 
 #include <boost/config.hpp>
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/support/ref.hpp>
+
+#   include <boost/preprocessor/expand.hpp>
+#   include <boost/preprocessor/empty.hpp>
+#   include <boost/preprocessor/facilities/intercept.hpp>
+#   include <boost/preprocessor/control/if.hpp>
+#   include <boost/preprocessor/comparison/equal.hpp>
+#   include <boost/preprocessor/arithmetic/sub.hpp>
+//#   ifndef BOOST_NO_RVALUE_REFERENCES
+#       include <boost/preprocessor/cat.hpp>
+#       include <boost/preprocessor/repetition/enum.hpp>
+//#   endif
 #   include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
 #   include <boost/preprocessor/repetition/enum_params.hpp>
+#   include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#   include <boost/call_traits.hpp>
 #endif
 
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   define VARIADIC_TEMPLATE_WITH_DEFAULT(MAX) struct void_;\
-    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(MAX, typename T, void_)>
-#   define VARIADIC_TEMPLATE(MAX) struct void;\
-    template<BOOST_PP_ENUM_PARAMS(MAX, typename T)>
-#   define EXPAND_ARGUMENTS(MAX) BOOST_PP_ENUM_PARAMS(MAX, T)
+#   define DUMMY1(_)
+#   define DUMMY2(_,__)
+
+#   define VARIADIC_TEMPLATE(N)                 template<BOOST_PP_ENUM_PARAMS(N, typename T)>
+#   define VARIADIC_TEMPLATE_WITH_DEFAULT(N)    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(N, typename T, void_)>
+#   define EXPAND_TEMPLATE_ARGUMENTS(N)         BOOST_PP_ENUM_PARAMS(N, T)
+#   ifdef BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
+#       define EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION_IMPL(MAX,N)<EXPAND_TEMPLATE_ARGUMENTS(N), BOOST_PP_ENUM_PARAMS(BOOST_PP_SUB(MAX,N), void_)>
+#   else
+#       define EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION_IMPL(MAX,N) <EXPAND_TEMPLATE_ARGUMENTS(N)>
+#   endif
+#   define EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(MAX,N)BOOST_PP_IF(BOOST_PP_EQUAL(MAX,N),DUMMY2,EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION_IMPL)(MAX,N)
+#   define EXPAND_TEMPLATE_ARGUMENTS_BINARY(N,PRE,POST)BOOST_PP_ENUM_BINARY_PARAMS(N, PRE T, POST BOOST_PP_INTERCEPT)
+#   define EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(N)BOOST_PP_ENUM_BINARY_PARAMS(N, typename call_traits<T, >::param_type _)
+#   define EXPAND_PARAMETERS(N)                 BOOST_PP_ENUM_PARAMS(N, _)
+
+#   define VARIADIC_TEMPLATE_A_IMPL(N)          template<BOOST_PP_ENUM_PARAMS(N, typename A)>
+#   define VARIADIC_TEMPLATE_A(N)               BOOST_PP_IF(N,VARIADIC_TEMPLATE_A_IMPL,DUMMY1)(N)
+#   define EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(N)BOOST_PP_ENUM_BINARY_PARAMS(N, A, BOOST_FUSION_R_ELSE_LREF(BOOST_PP_EMPTY()) BOOST_PP_INTERCEPT)
+#   define EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(N)BOOST_PP_ENUM_BINARY_PARAMS(N, A,BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()) BOOST_PP_INTERCEPT)
+#   define EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(N)BOOST_PP_ENUM_BINARY_PARAMS(N, A, BOOST_FUSION_R_ELSE_LREF(BOOST_PP_EMPTY()) _)
+#   define EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(N)BOOST_PP_ENUM_BINARY_PARAMS(N, A,BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()) _)
+#   define EXPAND_PARAMETERS_A_IMPL(Z,N,__)     BOOST_FUSION_FORWARD(BOOST_PP_CAT(A,N),BOOST_PP_CAT(_,N))
+#   define EXPAND_PARAMETERS_A(N)               BOOST_PP_ENUM(N,EXPAND_PARAMETERS_A_IMPL,_)
+
+namespace boost { namespace fusion
+{
+    struct void_;
+}}
 #else
 #   define VARIADIC_TEMPLATE_WITH_DEFAULT(MAX) template<typename... Arguments>
 #   define VARIADIC_TEMPLATE(MAX) template<typename... Arguments>
-#   define EXPAND_ARGUMENTS(MAX) Arguments...
+#   define EXPAND_TEMPLATE_ARGUMENTS(MAX) Arguments...
 #endif
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/detail/variadic_arguments_to_vector_n.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/detail/variadic_arguments_to_vector_n.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/detail/variadic_arguments_to_vector_n.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -4,8 +4,14 @@
 // http://www.boost.org/LICENSE_1_0.txt)
 
 template<BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PP_ITERATION(), typename T)>
-    struct variadic_arguments_to_vector<BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PP_ITERATION(), T)>
+struct variadic_arguments_to_vector<
+    BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PP_ITERATION(), T)
+>
 {
 public:
-    typedef mpl::vector<BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PP_ITERATION(), T)> type;
+    typedef
+        mpl::BOOST_PP_CAT(vector,BOOST_PP_ITERATION())<
+            BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PP_ITERATION(), T)
+        >
+    type;
 };
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_arguments_to_vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_arguments_to_vector.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_arguments_to_vector.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -9,15 +9,21 @@
 //workaround to get variadic template arguments into fixed-length template
 //argument list. We definitely need a boost config macro for this issue though.
 
+#include <boost/preprocessor/cat.hpp>
 #include <boost/preprocessor/iteration/iterate.hpp>
 #include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/mpl/vector.hpp>
+
+#include <boost/mpl/vector/vector10.hpp>
+#include <boost/mpl/vector/vector20.hpp>
+#include <boost/mpl/vector/vector30.hpp>
+#include <boost/mpl/vector/vector40.hpp>
+#include <boost/mpl/vector/vector50.hpp>
 
 namespace boost{namespace fusion
 {
 template<typename...> struct variadic_arguments_to_vector;
 #define BOOST_PP_ITERATION_PARAMS_1\
-    (3, (0, BOOST_MPL_LIMIT_VECTOR_SIZE, <boost/fusion/support/variadic_templates/detail/variadic_arguments_to_vector_n.hpp>))
+    (3, (0, 50, <boost/fusion/support/variadic_templates/detail/variadic_arguments_to_vector_n.hpp>))
 #include BOOST_PP_ITERATE()
 
 }}
Deleted: sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/make_tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/make_tuple.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,56 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_FUSION_TUPLE_DETAIL_PP_MAKE_TUPLE_HPP
-#define BOOST_FUSION_TUPLE_DETAIL_PP_MAKE_TUPLE_HPP
-#define FUSION_MAKE_TUPLE_10032005_0843
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/fusion/tuple/tuple.hpp>
-#include <boost/fusion/support/detail/as_fusion_element.hpp>
-
-namespace boost { namespace fusion
-{
-    inline tuple<>
-    make_tuple()
-    {
-        return tuple<>();
-    }
-
-#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data)                               \
-    typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/tuple/make_tuple.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-
-#undef BOOST_FUSION_AS_FUSION_ELEMENT
-
-}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-    inline tuple<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
-    make_tuple(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
-    {
-        return tuple<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
-            BOOST_PP_ENUM_PARAMS(N, _));
-    }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/tuple_expand.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/tuple_expand.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/tuple_expand.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -28,22 +28,9 @@
 
 #define N BOOST_PP_ITERATION()
 
-#if N == 1
-    explicit
-#endif
-    tuple(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
-      : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
-
     template <BOOST_PP_ENUM_PARAMS(N, typename U)>
     tuple(tuple<BOOST_PP_ENUM_PARAMS(N, U)> const& rhs)
       : base_type(rhs) {}
 
-    template <BOOST_PP_ENUM_PARAMS(N, typename U)>
-    tuple& operator=(tuple<BOOST_PP_ENUM_PARAMS(N, U)> const& rhs)
-    {
-        base_type::operator=(rhs);
-        return *this;
-    }
-
 #undef N
 #endif // defined(BOOST_PP_IS_ITERATING)
Deleted: sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/tuple_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/detail/pp/tuple_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,49 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_FUSION_TUPLE_DETAIL_PP_TUPLE_TIE_HPP
-#define BOOST_FUSION_TUPLE_DETAIL_PP_TUPLE_TIE_HPP
-#define FUSION_TUPLE_TIE_10032005_0846
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/fusion/tuple/tuple.hpp>
-
-namespace boost { namespace fusion
-{
-#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
-
-#define BOOST_PP_FILENAME_1 <boost/fusion/tuple/tuple_tie.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-    
-#undef BOOST_FUSION_REF
-
-}}
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-//  Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
-    inline tuple<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
-    tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
-    {
-        return tuple<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
-            BOOST_PP_ENUM_PARAMS(N, _));
-    }
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple/make_tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/make_tuple.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple/make_tuple.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -6,11 +6,12 @@
 #ifndef BOOST_FUSION_TUPLE_MAKE_TUPLE_HPP
 #define BOOST_FUSION_TUPLE_MAKE_TUPLE_HPP
 
-#include <boost/config.hpp>
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/tuple/detail/pp/make_tuple.hpp>
-#else
-#   include <boost/fusion/tuple/detail/variadic_templates/make_tuple.hpp>
-#endif
+#include <boost/fusion/tuple/tuple.hpp>
+
+#define BOOST_FUSION_SEQ_NAME tuple
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
+#include <boost/fusion/container/generation/detail/make_seq.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -18,13 +18,19 @@
 #include <boost/fusion/adapted/std_pair.hpp>
 #include <boost/fusion/support/ref.hpp>
 
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#endif
+
 namespace boost { namespace fusion
 {
-    VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_VECTOR_SIZE)
+    VARIADIC_TEMPLATE(FUSION_MAX_VECTOR_SIZE)
     struct tuple
-      : vector<EXPAND_ARGUMENTS(FUSION_MAX_LIST_SIZE)>
+      : vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_VECTOR_SIZE)>
     {
-        typedef vector<EXPAND_ARGUMENTS(FUSION_MAX_LIST_SIZE)> base_type;
+        typedef
+            vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_VECTOR_SIZE)>
+        base_type;
 
         tuple()
         {}
@@ -34,18 +40,24 @@
           : base_type(static_cast<base_type COMBINATION>(other_tuple))\
         {}\
         \
-        template <typename T1, typename T2>\
-        tuple(std::pair<T1, T2> COMBINATION rhs)\
+        template <typename A1, typename A2>\
+        tuple(std::pair<A1, A2> COMBINATION rhs)\
           : base_type(sequence_assign(\
-                static_cast<std::pair<T1, T2> COMBINATION>(rhs)))\
+                static_cast<std::pair<A1, A2> COMBINATION>(rhs)))\
         {}
 
         BOOST_FUSION_ALL_CV_REF_COMBINATIONS(TUPLE_CTOR,_)
 
-#undef LIST_CTOR
+#undef TUPLE_CTOR
 
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
-        #include <boost/fusion/tuple/detail/pp/tuple_expand.hpp>
+#   define BOOST_FUSION_USE_BASE_TYPE
+#   define BOOST_FUSION_SEQ_NAME tuple
+#   define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
+#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
+#   undef BOOST_FUSION_MAX_SEQ_SIZE
+#   undef BOOST_FUSION_SEQ_NAME
+#   undef BOOST_FUSION_USE_BASE_TYPE
 #else
         template <typename... OtherArguments>
         tuple(BOOST_FUSION_R_ELSE_CLREF(OtherArguments)... other_arguments)
@@ -73,11 +85,20 @@
     {};
 
     template <int N, typename Tuple>
-    inline typename result_of::at_c<BOOST_FUSION_R_ELSE_LREF(Tuple), N>::type
-    get(BOOST_FUSION_R_ELSE_LREF(Tuple) tup)
+    inline typename result_of::at_c<BOOST_FUSION_R_ELSE_CLREF(Tuple), N>::type
+    get(BOOST_FUSION_R_ELSE_CLREF(Tuple) tuple)
+    {
+        return at_c<N>(tuple);
+    }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <int N, typename Tuple>
+    inline typename result_of::at_c<Tuple&, N>::type
+    get(Tuple& tuple)
     {
-        return at_c<N>(tup);
+        return at_c<N>(tuple);
     }
+#endif
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple_tie.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -6,14 +6,14 @@
 #ifndef BOOST_FUSION_TUPLE_TUPLE_TIE_HPP
 #define BOOST_FUSION_TUPLE_TUPLE_TIE_HPP
 
-#include <boost/fusion/container/generation/ignore.hpp>
+#include <boost/fusion/tuple/tuple.hpp>
 
-#include <boost/config.hpp>
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/tuple/detail/pp/tuple_tie.hpp>
-#else
-#   include <boost/fusion/tuple/detail/variadic_templates/tuple_tie.hpp>
-#endif
+#define BOOST_FUSION_FUNCTION_NAME tie
+#define BOOST_FUSION_SEQ_NAME tuple
+#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
+#include <boost/fusion/container/generation/detail/seq_tie.hpp>
+#undef BOOST_FUSION_MAX_SEQ_SIZE
+#undef BOOST_FUSION_SEQ_NAME
+#undef BOOST_FUSION_FUNCTION_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -11,6 +11,7 @@
 
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/bool.hpp>
+#include <boost/type_traits/add_const.hpp>
 #include <boost/utility/enable_if.hpp>
 
 namespace boost { namespace fusion { namespace detail
@@ -23,7 +24,7 @@
         static typename
             enable_if<
                 traits::is_view<T>
-              , BOOST_FUSION_R_ELSE_LREF(OtherT)
+              , BOOST_FUSION_R_ELSE_CLREF(OtherT)
             >::type
         get_init_type(BOOST_FUSION_R_ELSE_LREF(OtherT) other_t)
         {
@@ -50,6 +51,16 @@
             >::type
         type;
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        typedef typename
+            mpl::if_<
+                traits::is_view<T>
+              , typename detail::add_lref<typename add_const<T>::type>::type
+              , type
+            >::type
+        call_param;
+#endif
+
 #define VIEW_STORAGE_CTOR(COMBINATION,_)\
         template<typename OtherT>\
         view_storage(view_storage<OtherT> COMBINATION storage)\
@@ -60,26 +71,26 @@
 
 #undef VIEW_STORAGE_CTOR
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        view_storage(call_param other_t)
+          : t(get_init_type(other_t))
+        {}
+#else
         template<typename OtherT>
-        view_storage(BOOST_FUSION_R_ELSE_LREF(OtherT) other_t)
-          : t(get_init_type(BOOST_FUSION_FORWARD(OtherT,other_t)))
+        view_storage(OtherT&& other_t)
+          : t(get_init_type(std::forward<OtherT>(other_t)))
         {}
+#endif
 
         template<typename OtherViewStorage>
         view_storage&
-        operator=(BOOST_FUSION_R_ELSE_LREF(OtherViewStorage) other_storage)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherViewStorage) other_storage)
         {
             t=BOOST_FUSION_FORWARD(OtherViewStorage,other_storage).t;
             return *this;
         }
 
         //TODO cschmidt: volatile?
-        //typename detail::add_lref<type>::type
-        //get()
-        //{
-        //    return get(typename traits::is_view<T>::type());
-        //}
-
         typename mpl::if_<traits::is_view<T>, type&, type>::type
         get() const
         {
@@ -87,18 +98,6 @@
         }
 
     private:
-        //type&
-        //get(mpl::true_ /*is_view*/)
-        //{
-        //    return t;
-        //}
-
-        //type
-        //get(mpl::false_ /*is_view*/)
-        //{
-        //    return *t;
-        //}
-
         type&
         get(mpl::true_ /*is_view*/)const
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -42,7 +42,8 @@
         typedef forward_traversal_tag category;
         typedef mpl::true_ is_view;
 
-        typedef typename detail::view_storage<Seq>::type seq_type;
+        typedef detail::view_storage<Seq> storage_type;
+        typedef typename storage_type::type seq_type;
         typedef Pred pred_type;
 
 #define FILTER_VIEW_CTOR(COMBINATION,_)\
@@ -55,20 +56,26 @@
 
 #undef FILTER_VIEW_CTOR
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        explicit filter_view(typename storage_type::call_param seq)
+          : seq(seq)
+        {}
+#else
         template<typename OtherSeq>
-        explicit filter_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq) other_seq)
+        explicit filter_view(BOOST_FUSION_R_ELSE_CLREF(OtherSeq) other_seq)
           : seq(BOOST_FUSION_FORWARD(OtherSeq,other_seq))
         {}
+#endif
 
         template<typename OtherFilterView>
         filter_view&
-        operator=(BOOST_FUSION_R_ELSE_LREF(OtherFilterView) other_view)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherFilterView) other_view)
         {
             seq=BOOST_FUSION_FORWARD(OtherFilterView,other_view).seq;
             return *this;
         }
 
-        detail::view_storage<Seq> seq;
+        storage_type seq;
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -40,7 +40,7 @@
         typedef typename traits::category_of<First>::type category;
 
         template<typename OtherIteratorRange>
-        iterator_range(BOOST_FUSION_R_ELSE_LREF(OtherIteratorRange) other_range)
+        iterator_range(BOOST_FUSION_R_ELSE_CLREF(OtherIteratorRange) other_range)
           : first(other_range.first)
           , last(other_range.last)
         {}
@@ -52,7 +52,7 @@
 
         template<typename OtherIteratorRange>
         iterator_range&
-        operator=(BOOST_FUSION_R_ELSE_LREF(OtherIteratorRange) other_range)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherIteratorRange) other_range)
         {
             first=other_range.first;
             last=other_range.last;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -43,8 +43,10 @@
         typedef forward_traversal_tag category;
         typedef mpl::true_ is_view;
 
-        typedef typename detail::view_storage<Seq1>::type seq1_type;
-        typedef typename detail::view_storage<Seq2>::type seq2_type;
+        typedef detail::view_storage<Seq1> storage1_type;
+        typedef typename storage1_type::type seq1_type;
+        typedef detail::view_storage<Seq2> storage2_type;
+        typedef typename storage2_type::type seq2_type;
 
         typedef typename
             mpl::plus<
@@ -54,29 +56,37 @@
         size;
 
         template<typename OtherJointView>
-        joint_view(BOOST_FUSION_R_ELSE_LREF(OtherJointView) other_view)
+        joint_view(BOOST_FUSION_R_ELSE_CLREF(OtherJointView) other_view)
           : seq1(BOOST_FUSION_FORWARD(OtherJointView,other_view).seq1)
           , seq2(BOOST_FUSION_FORWARD(OtherJointView,other_view).seq2)
         {}
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        joint_view(typename storage1_type::call_param seq1,
+               typename storage2_type::call_param seq2)
+          : seq1(seq1)
+          , seq2(seq2)
+        {}
+#else
         template<typename OtherSeq1, typename OtherSeq2>
-        joint_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq1) other_seq1,
-                BOOST_FUSION_R_ELSE_LREF(OtherSeq2) other_seq2)
+        joint_view(BOOST_FUSION_R_ELSE_CLREF(OtherSeq1) other_seq1,
+                BOOST_FUSION_R_ELSE_CLREF(OtherSeq2) other_seq2)
           : seq1(BOOST_FUSION_FORWARD(OtherSeq1,other_seq1))
           , seq2(BOOST_FUSION_FORWARD(OtherSeq2,other_seq2))
         {}
+#endif
 
         template<typename OtherJointView>
         OtherJointView&
-        operator=(BOOST_FUSION_R_ELSE_LREF(OtherJointView) other_view)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherJointView) other_view)
         {
             seq1=BOOST_FUSION_FORWARD(OtherJointView,other_view).seq1;
             seq2=BOOST_FUSION_FORWARD(OtherJointView,other_view).seq2;
             return *this;
         }
 
-        detail::view_storage<Seq1> seq1;
-        detail::view_storage<Seq2> seq2;
+        storage1_type seq1;
+        storage2_type seq2;
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -45,7 +45,8 @@
         typedef fusion_sequence_tag tag; // this gets picked up by MPL
         typedef mpl::true_ is_view;
 
-        typedef typename detail::view_storage<Seq>::type seq_type;
+        typedef detail::view_storage<Seq> storage_type;
+        typedef typename storage_type::type seq_type;
         typedef typename traits::category_of<seq_type>::type category;
         typedef typename result_of::size<seq_type>::type size;
 
@@ -65,14 +66,20 @@
 
 #undef REVERSE_VIEW_CTOR
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        explicit reverse_view(typename storage_type::call_param seq)
+          : seq(seq)
+        {}
+#else
         template<typename OtherSeq>
-        explicit reverse_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq) other_seq)
-          : seq(BOOST_FUSION_FORWARD(OtherSeq,other_seq))
+        explicit reverse_view(OtherSeq&& other_seq)
+          : seq(std::forward<OtherSeq>(other_seq))
         {}
+#endif
 
         template<typename OtherReverseView>
         OtherReverseView&
-        operator=(BOOST_FUSION_R_ELSE_LREF(OtherReverseView) other_view)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherReverseView) other_view)
         {
             seq=BOOST_FUSION_FORWARD(OtherReverseView,other_view).seq;
             return *this;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -16,7 +16,6 @@
 
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/int.hpp>
-#include <boost/utility/enable_if.hpp>
 
 #include <boost/fusion/view/single_view/detail/single_view_fwd.hpp>
 #include <boost/fusion/view/single_view/detail/single_view_iterator.hpp>
@@ -57,46 +56,43 @@
 
 #undef SINGLE_VIEW_CTOR
 
-        template<typename SeqAssign>
-        single_view(BOOST_FUSION_R_ELSE_LREF(SeqAssign) seq,
-            typename enable_if<
-                 is_sequence_assign<BOOST_FUSION_R_ELSE_LREF(SeqAssign)>
-            >::type* =NULL)
-          : val(fusion::front(seq.get()))
-        {}
-
         template<typename OtherT>
-        explicit single_view(BOOST_FUSION_R_ELSE_CLREF(OtherT) val,
-            typename disable_if<
-                    is_sequence_assign<BOOST_FUSION_R_ELSE_CLREF(OtherT)>
-            >::type* =NULL)
+        explicit single_view(BOOST_FUSION_R_ELSE_CLREF(OtherT) val)
           : val(BOOST_FUSION_FORWARD(OtherT,val))
         {}
 
+#define SINGLE_VIEW_ASSIGN_CTOR(COMBINATION,_)\
+        template<typename SeqRef>\
+        single_view(\
+            support::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
+          : val(fusion::front(seq_assign.get()))\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(SINGLE_VIEW_ASSIGN_CTOR,_)
+
+#undef SINGLE_VIEW_ASSIGN_CTOR
+
         template<typename OtherT>
-        typename
-            disable_if<
-                is_sequence_assign<BOOST_FUSION_R_ELSE_CLREF(OtherT)>
-              , single_view&
-            >::type
+        single_view&
         operator=(BOOST_FUSION_R_ELSE_CLREF(OtherT) val)
         {
             val=BOOST_FUSION_FORWARD(OtherT,val);
             return *this;
         }
 
-        template<typename SeqAssign>
-        typename
-            enable_if<
-                is_sequence_assign<BOOST_FUSION_R_ELSE_LREF(SeqAssign)>
-              , single_view&
-            >::type
-        operator=(BOOST_FUSION_R_ELSE_LREF(SeqAssign) seq)
-        {
-            val=fusion::front(seq.get());
-            return *this;
+#define SINGLE_VIEW_SEQ_ASSIGN(COMBINATION,_)\
+        template<typename SeqRef>\
+        single_view&\
+        operator=(support::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
+        {\
+            val=fusion::front(seq_assign.get());\
+            return *this;\
         }
 
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(SINGLE_VIEW_SEQ_ASSIGN,_)
+
+#undef SINGLE_VIEW_SEQ_ASSIGN
+
         value_type val;
     };
 
Deleted: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/apply_transform_result.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/apply_transform_result.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
+++ (empty file)
@@ -1,36 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2007 Dan Marsden
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_FUSION_VIEW_TRANSFORM_VIEW_DETAIL_APPLY_TRANSFORM_RESULT_HPP
-#define BOOST_FUSION_VIEW_TRANSFORM_VIEW_DETAIL_APPLY_TRANSFORM_RESULT_HPP
-
-#include <boost/fusion/support/result_of.hpp>
-
-namespace boost { namespace fusion
-{
-    struct void_;
-
-    namespace detail
-    {
-        template <typename F>
-        struct apply_transform_result
-        {
-            template <typename T0, typename T1 = void_>
-            struct apply
-              : support::result_of<F(T0, T1)>
-            {};
-
-            template <typename T0>
-            struct apply<T0, void_>
-              : support::result_of<F(T0)>
-            {};
-        };
-    }
-}}
-
-#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -10,10 +10,7 @@
 #define BOOST_FUSION_VIEW_TRANSFORM_VIEW_DETAIL_AT_IMPL_HPP
 
 #include <boost/fusion/sequence/intrinsic/at.hpp>
-
-#include <boost/mpl/apply.hpp>
-
-#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
+#include <boost/fusion/support/result_of.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -29,14 +26,12 @@
             typedef typename detail::remove_reference<SeqRef>::type seq;
 
             typedef typename
-                mpl::apply<
-                    detail::apply_transform_result<
+                support::result_of<
+                    typename support::get_func_base<
                         typename seq::transform_type
-                    >
-                  , typename result_of::at<
-                        typename seq::seq_type
-                      , N
-                    >::type
+                    >::type(
+                    typename result_of::at<typename seq::seq_type, N>::type
+                    )
                 >::type
             type;
 
@@ -57,18 +52,18 @@
             typedef typename detail::remove_reference<SeqRef>::type seq;
 
             typedef typename
-                mpl::apply<
-                    detail::apply_transform_result<
+                support::result_of<
+                    typename support::get_func_base<
                         typename seq::transform_type
-                    >
-                  , typename boost::fusion::result_of::at<
+                    >::type(
+                   typename boost::fusion::result_of::at<
                         typename seq::seq1_type
                       , N
                     >::type
                   , typename boost::fusion::result_of::at<
                         typename seq::seq2_type
                       , N
-                    >::type
+                    >::type)
                 >::type
             type;
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -10,10 +10,7 @@
 
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/value_of.hpp>
-
-#include <boost/mpl/apply.hpp>
-
-#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
+#include <boost/fusion/support/result_of.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -31,15 +28,15 @@
                 detail::remove_reference<ItRef>::type
             it;
 
-            //TODO: return only const
+            //TODO reference on deref
+            //TODO return only const
             typedef typename
-                mpl::apply<
-                    detail::apply_transform_result<
+                support::result_of<
+                    typename support::get_func_base<
                         typename it::transform_type
-                    >
-                  , typename result_of::deref<
-                        typename it::first_type
-                    >::type
+                    >::type(
+                    typename result_of::deref<typename it::first_type>::type
+                    )
                 >::type
             type;
 
@@ -61,16 +58,12 @@
             typedef typename detail::remove_reference<ItRef>::type it;
 
             typedef typename
-                mpl::apply<
-                    detail::apply_transform_result<
+                support::result_of<
+                    typename support::get_func_base<
                         typename it::transform_type
-                    >
-                  , typename result_of::deref<
-                        typename it::first1_type
-                    >::type
-                  , typename result_of::deref<
-                        typename it::first2_type
-                    >::type
+                    >::type(
+                    typename result_of::deref<typename it::first1_type>::type
+                  , typename result_of::deref<typename it::first2_type>::type)
                 >::type
             type;
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/transform_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/transform_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/transform_view_iterator.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -18,7 +18,7 @@
 
     template <typename First, typename FRef>
     struct transform_view_iterator
-        : iterator_base<transform_view_iterator<First, FRef> >
+      : iterator_base<transform_view_iterator<First, FRef> >
     {
         //TODO !!!
         typedef FRef transform_type;
@@ -56,7 +56,7 @@
 
     template <typename First1, typename First2, typename FRef>
     struct transform_view_iterator2
-        : iterator_base<transform_view_iterator2<First1, First2, FRef> >
+      : iterator_base<transform_view_iterator2<First1, First2, FRef> >
     {
         typedef First1 first1_type;
         typedef First2 first2_type;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/value_at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/value_at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/value_at_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -9,10 +9,8 @@
 #ifndef BOOST_FUSION_VIEW_TRANSFORM_VIEW_DETAIL_VALUE_AT_IMPL_HPP
 #define BOOST_FUSION_VIEW_TRANSFORM_VIEW_DETAIL_VALUE_AT_IMPL_HPP
 
-#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
 #include <boost/fusion/sequence/intrinsic/value_at.hpp>
-
-#include <boost/mpl/apply.hpp>
+#include <boost/fusion/support/result_of.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -28,14 +26,14 @@
             typedef typename detail::remove_reference<SeqRef>::type seq;
 
             typedef typename
-                mpl::apply<
-                    detail::apply_transform_result<
+                support::result_of<
+                    typename support::get_func_base<
                         typename seq::transform_type
-                    >
-                  , typename boost::fusion::result_of::value_at<
+                    >::type(
+                    typename boost::fusion::result_of::value_at<
                         typename seq::seq_type
                       , N
-                    >::type
+                    >::type)
                 >::type
             type;
         };
@@ -50,16 +48,16 @@
             typedef typename detail::remove_reference<SeqRef>::type seq;
 
             typedef typename
-                mpl::apply<
-                    detail::apply_transform_result<
+                support::result_of<
+                    typename support::get_func_base<
                         typename seq::transform_type
-                    >
-                  , typename boost::fusion::result_of::value_at<
+                    >::type(
+                    typename boost::fusion::result_of::value_at<
                         typename seq::seq1_type, N
                     >::type
                   , typename boost::fusion::result_of::value_at<
                         typename seq::seq2_type, N
-                    >::type
+                    >::type)
                 >::type
             type;
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/value_of_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/value_of_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/value_of_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -8,9 +8,8 @@
 #ifndef BOOST_FUSION_VIEW_TRANSFORM_VIEW_DETAIL_VALUE_OF_IMPL_HPP
 #define BOOST_FUSION_VIEW_TRANSFORM_VIEW_DETAIL_VALUE_OF_IMPL_HPP
 
-#include <boost/mpl/apply.hpp>
 #include <boost/fusion/iterator/value_of.hpp>
-#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
+#include <boost/fusion/support/result_of.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -27,13 +26,11 @@
             typedef typename detail::remove_reference<ItRef>::type it;
 
             typedef typename
-                mpl::apply<
-                    detail::apply_transform_result<
+                support::result_of<
+                    typename support::get_func_base<
                         typename it::transform_type
-                    >
-                  , typename result_of::value_of<
-                        typename it::first_type
-                    >::type
+                    >::type(
+                    typename result_of::value_of<typename it::first_type>::type)
                 >::type
             type;
         };
@@ -49,16 +46,12 @@
             typedef typename detail::remove_reference<ItRef>::type it;
 
             typedef typename
-                mpl::apply<
-                    detail::apply_transform_result<
+                support::result_of<
+                    typename support::get_func_base<
                         typename it::transform_type
-                    >
-                  , typename result_of::value_of<
-                        typename it::first1_type
-                    >::type
-                  , typename result_of::value_of<
-                        typename it::first2_type
-                    >::type
+                    >::type(
+                   typename result_of::value_of<typename it::first1_type>::type
+                 , typename result_of::value_of<typename it::first2_type>::type)
                 >::type
             type;
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -58,8 +58,10 @@
         //       result_of::size<Sequence1>,==,result_of::size<Sequence2>,
         //       "both sequences must have the same length");
 
-        typedef typename detail::view_storage<Seq1>::type seq1_type;
-        typedef typename detail::view_storage<Seq2>::type seq2_type;
+        typedef detail::view_storage<Seq1> storage1_type;
+        typedef typename storage1_type::type seq1_type;
+        typedef detail::view_storage<Seq2> storage2_type;
+        typedef typename storage2_type::type seq2_type;
         typedef F transform_type;
 
         typedef transform_view2_tag fusion_tag;
@@ -77,24 +79,34 @@
         typedef typename result_of::size<seq1_type>::type size;
 
         template<typename OtherTransformView>
-        transform_view(BOOST_FUSION_R_ELSE_LREF(OtherTransformView) other_view)
+        transform_view(BOOST_FUSION_R_ELSE_CLREF(OtherTransformView) other_view)
           : seq1(BOOST_FUSION_FORWARD(OtherTransformView,other_view).seq1)
           , seq2(BOOST_FUSION_FORWARD(OtherTransformView,other_view).seq2)
           , f(BOOST_FUSION_FORWARD(OtherTransformView,other_view).f)
         {}
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        transform_view(typename storage1_type::call_param seq1,
+                typename storage2_type::call_param seq2,
+                F const& f)
+          : seq1(seq1)
+          , seq2(seq2)
+          , f(f)
+        {}
+#else
         template<typename OtherSeq1, typename OtherSeq2,typename OtherF>
-        transform_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq1) seq1,
-                BOOST_FUSION_R_ELSE_LREF(OtherSeq2) seq2,
-                BOOST_FUSION_R_ELSE_LREF(OtherF) f)
+        transform_view(BOOST_FUSION_R_ELSE_CLREF(OtherSeq1) seq1,
+                BOOST_FUSION_R_ELSE_CLREF(OtherSeq2) seq2,
+                BOOST_FUSION_R_ELSE_CLREF(OtherF) f)
           : seq1(BOOST_FUSION_FORWARD(OtherSeq1,seq1))
           , seq2(BOOST_FUSION_FORWARD(OtherSeq2,seq2))
           , f(BOOST_FUSION_FORWARD(OtherF,f))
         {}
+#endif
 
         template<typename OtherTransformView>
         OtherTransformView&
-        operator=(BOOST_FUSION_R_ELSE_LREF(OtherTransformView) other_view)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherTransformView) other_view)
         {
             seq1=BOOST_FUSION_FORWARD(OtherTransformView,other_view).seq1;
             seq2=BOOST_FUSION_FORWARD(OtherTransformView,other_view).seq2;
@@ -102,8 +114,8 @@
             return *this;
         }
 
-        detail::view_storage<Seq1> seq1;
-        detail::view_storage<Seq2> seq2;
+        storage1_type seq1;
+        storage2_type seq2;
         transform_type f;
     };
 
@@ -117,44 +129,45 @@
       : sequence_base<transform_view<Seq, F> >
 #endif
     {
-        typedef typename
-            mpl::if_<
-                traits::is_view<Seq>
-              , typename detail::remove_reference<Seq>::type
-              , typename detail::add_lref<Seq>::type
-            >::type
-        seq_type;
-        typedef typename traits::category_of<seq_type>::type category;
-        typedef typename result_of::size<seq_type>::type size;
+        typedef detail::view_storage<Seq> storage_type;
+        typedef typename storage_type::type seq_type;
         typedef F transform_type;
 
+        typedef typename traits::category_of<seq_type>::type category;
+        typedef typename result_of::size<seq_type>::type size;
         typedef transform_view_tag fusion_tag;
         typedef fusion_sequence_tag tag; // this gets picked up by MPL
         typedef mpl::true_ is_view;
 
         template<typename OtherTransformView>
-        transform_view(BOOST_FUSION_R_ELSE_LREF(OtherTransformView) view)
+        transform_view(BOOST_FUSION_R_ELSE_CLREF(OtherTransformView) view)
           : seq(BOOST_FUSION_FORWARD(OtherTransformView,view).seq)
           , f(BOOST_FUSION_FORWARD(OtherTransformView,view).f)
         {}
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        transform_view(typename storage_type::call_param seq,F const& f)
+          : seq(seq)
+          , f(f)
+        {}
+#else
         template<typename OtherSeq, typename OtherF>
-        transform_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq) seq,
-                BOOST_FUSION_R_ELSE_LREF(OtherF) f)
-          : seq(BOOST_FUSION_FORWARD(OtherSeq,seq))
-          , f(BOOST_FUSION_FORWARD(OtherF,f))
+        transform_view(OtherSeq&& seq,OtherF&& f)
+          : seq(std::forward<OtherSeq>(seq))
+          , f(std::forward<OtherF>(f))
         {}
+#endif
 
         template<typename OtherTransformView>
         OtherTransformView&
-        operator=(BOOST_FUSION_R_ELSE_LREF(OtherTransformView) view)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherTransformView) view)
         {
             seq=BOOST_FUSION_FORWARD(OtherTransformView,view).seq;
             f=BOOST_FUSION_FORWARD(OtherTransformView,view).f;
             return *this;
         }
 
-        detail::view_storage<Seq> seq;
+        storage_type seq;
         transform_type f;
     };
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -42,7 +42,7 @@
             typename result<poly_begin(BOOST_FUSION_R_ELSE_LREF(Seq))>::type
             operator()(BOOST_FUSION_R_ELSE_LREF(Seq) seq) const
             {
-                return fusion::begin(BOOST_FUSION_FORWARD(Seq,seq));
+                return fusion::begin(seq);
             }
 
             unused_type const&
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -55,8 +55,7 @@
             typename result<endpoints(BOOST_FUSION_R_ELSE_LREF(Seq))>::type
             operator()(BOOST_FUSION_R_ELSE_LREF(Seq) seq) const
             {
-                return fusion::advance<M>(
-                        fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
+                return fusion::advance<M>(fusion::begin(seq));
             }
 
             unused_type const&
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/value_at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/value_at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/value_at_impl.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -28,12 +28,12 @@
             template<typename T>
             struct result;
 
-            template<typename Self, typename Seq>
-            struct result<Self(Seq)>
+            template<typename Self, typename SeqRef>
+            struct result<Self(SeqRef)>
               : mpl::eval_if<
-                    is_same<Seq, unused_type const&>
+                    is_same<SeqRef, unused_type const&>
                   , mpl::identity<unused_type const&>
-                  , result_of::value_at<Seq, N>
+                  , result_of::value_at<SeqRef, N>
                 >
             {};
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -157,13 +157,14 @@
 #undef ZIP_VIEW_CTOR
 
         template<typename OtherSeqs>
-        explicit zip_view(BOOST_FUSION_R_ELSE_LREF(OtherSeqs) other_seqs)
-          : seqs(sequence_assign(BOOST_FUSION_FORWARD(OtherSeqs,other_seqs)))
+        explicit zip_view(BOOST_FUSION_R_ELSE_CLREF(OtherSeqs) other_seqs)
+          : seqs(fusion::sequence_assign(
+              BOOST_FUSION_FORWARD(OtherSeqs,other_seqs)))
         {}
 
         template<typename OtherZipView>
         zip_view&
-        operator=(BOOST_FUSION_R_ELSE_LREF(OtherZipView) other_zip_view)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherZipView) other_zip_view)
         {
             seqs=BOOST_FUSION_FORWARD(OtherZipView,other_zip_view).seqs;
             return *this;
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/Jamfile	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -11,89 +11,89 @@
 {
     test-suite fusion :
 
-#    [ run algorithm/all.cpp :  :  :  : ]
-#    [ run algorithm/any.cpp :  :  :  : ]
-#    [ run algorithm/clear.cpp :  :  :  : ]
-#    [ run algorithm/count_if.cpp :  :  :  : ]
-#    [ run algorithm/count.cpp :  :  :  : ]
-#    [ run algorithm/erase_key.cpp :  :  :  : ]
-#    [ run algorithm/erase.cpp :  :  :  : ]
-#    [ run algorithm/filter_if.cpp :  :  :  : ]
-#    [ run algorithm/filter.cpp :  :  :  : ]
-#    [ run algorithm/find_if.cpp :  :  :  : ]
-#    [ run algorithm/find.cpp :  :  :  : ]
-#    [ run algorithm/fold.cpp :  :  :  : ]
-#    [ run algorithm/for_each.cpp :  :  :  : ]
-#    [ run algorithm/insert_range.cpp :  :  :  : ]
-#    [ run algorithm/insert.cpp :  :  :  : ]
-#    [ run algorithm/join.cpp :  :  :  : ]
-#    [ run algorithm/none.cpp :  :  :  : ]
-#    [ run algorithm/pop_back.cpp :  :  :  : ]
-#    [ run algorithm/pop_front.cpp :  :  :  : ]
-#    [ run algorithm/push_back.cpp :  :  :  : ]
-#    [ run algorithm/push_front.cpp :  :  :  : ]
-#    [ run algorithm/remove_if.cpp :  :  :  : ]
-#    [ run algorithm/remove.cpp :  :  :  : ]
-#    [ run algorithm/replace_if.cpp :  :  :  : ]
-#    [ run algorithm/replace.cpp :  :  :  : ]
-#    [ run algorithm/reverse.cpp :  :  :  : ]
-#    [ run algorithm/transform.cpp :  :  :  : ]
+    [ run algorithm/all.cpp :  :  :  : ]
+    [ run algorithm/any.cpp :  :  :  : ]
+    [ run algorithm/clear.cpp :  :  :  : ]
+    [ run algorithm/count_if.cpp :  :  :  : ]
+    [ run algorithm/count.cpp :  :  :  : ]
+    [ run algorithm/erase_key.cpp :  :  :  : ]
+    [ run algorithm/erase.cpp :  :  :  : ]
+    [ run algorithm/filter_if.cpp :  :  :  : ]
+    [ run algorithm/filter.cpp :  :  :  : ]
+    [ run algorithm/find_if.cpp :  :  :  : ]
+    [ run algorithm/find.cpp :  :  :  : ]
+    [ run algorithm/fold.cpp :  :  :  : ]
+    [ run algorithm/for_each.cpp :  :  :  : ]
+    [ run algorithm/insert_range.cpp :  :  :  : ]
+    [ run algorithm/insert.cpp :  :  :  : ]
+    [ run algorithm/join.cpp :  :  :  : ]
+    [ run algorithm/none.cpp :  :  :  : ]
+    [ run algorithm/pop_back.cpp :  :  :  : ]
+    [ run algorithm/pop_front.cpp :  :  :  : ]
+    [ run algorithm/push_back.cpp :  :  :  : ]
+    [ run algorithm/push_front.cpp :  :  :  : ]
+    [ run algorithm/remove_if.cpp :  :  :  : ]
+    [ run algorithm/remove.cpp :  :  :  : ]
+    [ run algorithm/replace_if.cpp :  :  :  : ]
+    [ run algorithm/replace.cpp :  :  :  : ]
+    [ run algorithm/reverse.cpp :  :  :  : ]
+    [ run algorithm/transform.cpp :  :  :  : ]
 #    [ run algorithm/zip_ignore.cpp : : : : ]
 #    [ run algorithm/zip.cpp : : : : ]
 #    [ run algorithm/zip2.cpp : : : : ]
 
-#    [ run sequence/adapt_struct.cpp : : : : ]
-#    [ run sequence/adapt_assoc_struct.cpp : : : : ]
-#    [ run sequence/array.cpp : : : : ]
-#    [ run sequence/as_list.cpp :  :  :  : ]
-#    [ run sequence/as_map.cpp :  :  :  : ]
-#    [ run sequence/as_set.cpp :  :  :  : ]
-#    [ run sequence/as_vector.cpp :  :  :  : ]
-#    [ run sequence/boost_tuple.cpp :  :  :  : ]
-#    [ run sequence/cons.cpp :  :  :  : ]
-#    [ run sequence/deduce_sequence.cpp : : : : ]
-#    [ run sequence/filter_view.cpp :  :  :  : ]
-#    [ run sequence/io.cpp :  :  :  : ]
-#    [ run sequence/iterator_range.cpp :  :  :  : ]
-#    [ run sequence/joint_view.cpp :  :  :  : ]
-#    [ run sequence/list_comparison.cpp :  :  :  : ]
-#    [ run sequence/list_construction.cpp :  :  :  : ]
-#    [ run sequence/list_copy.cpp :  :  :  : ]
-#    [ run sequence/list_iterator.cpp :  :  :  : ]
-#    [ run sequence/list_make.cpp :  :  :  : ]
-#    [ run sequence/list_misc.cpp :  :  :  : ]
-#    [ run sequence/list_mutate.cpp :  :  :  : ]
-#    [ run sequence/list_tie.cpp :  :  :  : ]
-#    [ run sequence/map_tie.cpp :  :  :  : ]
-#    [ run sequence/map.cpp :  :  :  : ]
-#    [ run sequence/reverse_view.cpp :  :  :  : ]
-#    [ run sequence/set.cpp :  :  :  : ]
-#    [ run sequence/single_view.cpp :  :  :  : ]
-#    [ run sequence/std_pair.cpp :  :  :  : ]
-#    [ run sequence/swap.cpp :  :  :  : ]
-#    [ run sequence/tr1_tuple_auto_conv.cpp :  :  :  : ]
-#    [ run sequence/transform_view.cpp :  :  :  : ]
-#    [ run sequence/tuple_comparison.cpp :  :  :  : ]
-#    [ run sequence/tuple_construction.cpp :  :  :  : ]
-#    [ run sequence/tuple_copy.cpp :  :  :  : ]
-#    [ run sequence/tuple_element.cpp :  :  :  : ]
-#    [ run sequence/tuple_make.cpp :  :  :  : ]
-#    [ run sequence/tuple_misc.cpp :  :  :  : ]
-#    [ run sequence/tuple_mutate.cpp :  :  :  : ]
-#    [ run sequence/tuple_tie.cpp :  :  :  : ]
-#    [ run sequence/vector_comparison.cpp :  :  :  : ]
-#    [ run sequence/vector_construction.cpp :  :  :  : ]
-#    [ run sequence/vector_copy.cpp :  :  :  : ]
-     [ run sequence/vector_iterator.cpp :  :  :  : ]
-#    [ run sequence/vector_make.cpp :  :  :  : ]
-#    [ run sequence/vector_misc.cpp :  :  :  : ]
-#    [ run sequence/vector_mutate.cpp :  :  :  : ]
-#    [ run sequence/vector_n.cpp :  :  :  : ]
-#    [ run sequence/vector_tie.cpp :  :  :  : ]
-#    [ run sequence/vector_value_at.cpp :  :  :  : ]
-#    [ run sequence/zip_view_ignore.cpp : : : : ]
-#    [ run sequence/zip_view.cpp : : : : ]
-#    [ run sequence/zip_view2.cpp : : : : ]
+    [ run sequence/adapt_struct.cpp : : : : ]
+    [ run sequence/adapt_assoc_struct.cpp : : : : ]
+    [ run sequence/array.cpp : : : : ]
+    [ run sequence/as_list.cpp :  :  :  : ]
+    [ run sequence/as_map.cpp :  :  :  : ]
+    [ run sequence/as_set.cpp :  :  :  : ]
+    [ run sequence/as_vector.cpp :  :  :  : ]
+    [ run sequence/boost_tuple.cpp :  :  :  : ]
+    [ run sequence/cons.cpp :  :  :  : ]
+    [ run sequence/deduce_sequence.cpp : : : : ]
+    [ run sequence/filter_view.cpp :  :  :  : ]
+    [ run sequence/io.cpp :  :  :  : ]
+    [ run sequence/iterator_range.cpp :  :  :  : ]
+    [ run sequence/joint_view.cpp :  :  :  : ]
+    [ run sequence/list_comparison.cpp :  :  :  : ]
+    [ run sequence/list_construction.cpp :  :  :  : ]
+    [ run sequence/list_copy.cpp :  :  :  : ]
+    [ run sequence/list_iterator.cpp :  :  :  : ]
+    [ run sequence/list_make.cpp :  :  :  : ]
+    [ run sequence/list_misc.cpp :  :  :  : ]
+    [ run sequence/list_mutate.cpp :  :  :  : ]
+    [ run sequence/list_tie.cpp :  :  :  : ]
+    [ run sequence/map_tie.cpp :  :  :  : ]
+    [ run sequence/map.cpp :  :  :  : ]
+    [ run sequence/reverse_view.cpp :  :  :  : ]
+    [ run sequence/set.cpp :  :  :  : ]
+    [ run sequence/single_view.cpp :  :  :  : ]
+    [ run sequence/std_pair.cpp :  :  :  : ]
+    [ run sequence/swap.cpp :  :  :  : ]
+    [ run sequence/tr1_tuple_auto_conv.cpp :  :  :  : ]
+    [ run sequence/transform_view.cpp :  :  :  : ]
+    [ run sequence/tuple_comparison.cpp :  :  :  : ]
+    [ run sequence/tuple_construction.cpp :  :  :  : ]
+    [ run sequence/tuple_copy.cpp :  :  :  : ]
+    [ run sequence/tuple_element.cpp :  :  :  : ]
+    [ run sequence/tuple_make.cpp :  :  :  : ]
+    [ run sequence/tuple_misc.cpp :  :  :  : ]
+    [ run sequence/tuple_mutate.cpp :  :  :  : ]
+    [ run sequence/tuple_tie.cpp :  :  :  : ]
+    [ run sequence/vector_comparison.cpp :  :  :  : ]
+    [ run sequence/vector_construction.cpp :  :  :  : ]
+    [ run sequence/vector_copy.cpp :  :  :  : ]
+    [ run sequence/vector_iterator.cpp :  :  :  : ]
+    [ run sequence/vector_make.cpp :  :  :  : ]
+    [ run sequence/vector_misc.cpp :  :  :  : ]
+    [ run sequence/vector_mutate.cpp :  :  :  : ]
+    [ run sequence/vector_n.cpp :  :  :  : ]
+    [ run sequence/vector_tie.cpp :  :  :  : ]
+    [ run sequence/vector_value_at.cpp :  :  :  : ]
+    [ run sequence/zip_view_ignore.cpp : : : : ]
+    [ run sequence/zip_view.cpp : : : : ]
+    [ run sequence/zip_view2.cpp : : : : ]
 
 #    [ run functional/fused_function_object.cpp : : : : ]
 #    [ run functional/fused_procedure.cpp : : : : ]
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/find_if.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/find_if.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/find_if.cpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -50,7 +50,8 @@
         using boost::mpl::_;
 
         typedef vector<int, char, X, double> mpl_vec;
-        BOOST_TEST((*find_if<is_same<_, X> >(mpl_vec()) == 12345));
+        //TODO!!!
+        BOOST_TEST((*boost::fusion::find_if<is_same<_, X> >(mpl_vec()) == 12345));
     }
 
     {
@@ -61,7 +62,7 @@
         using boost::mpl::_;
 
         typedef vector_c<int, 1, 2, 3, 4> mpl_vec;
-        BOOST_TEST((*find_if<less<_, int_<3> > >(mpl_vec()) == 1));
+        BOOST_TEST((*boost::fusion::find_if<less<_, int_<3> > >(mpl_vec()) == 1));
     }
 
     return boost::report_errors();
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/sequence/misc.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/sequence/misc.hpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/sequence/misc.hpp	2009-07-26 15:54:51 EDT (Sun, 26 Jul 2009)
@@ -11,7 +11,9 @@
 #include <boost/fusion/support/is_sequence.hpp>
 #include <boost/fusion/mpl.hpp>
 
+#include <boost/mpl/push_back.hpp>
 #include <boost/mpl/push_front.hpp>
+#include <boost/mpl/size.hpp>
 #include <boost/mpl/equal.hpp>
 #include <boost/mpl/deref.hpp>
 #include <boost/mpl/back.hpp>