$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r54655 - in sandbox/SOC/2009/fusion: boost/fusion/adapted/mpl/detail boost/fusion/algorithm/iteration boost/fusion/algorithm/query boost/fusion/algorithm/query/detail boost/fusion/algorithm/transformation boost/fusion/container/generation boost/fusion/container/list boost/fusion/container/list/detail/cons boost/fusion/container/list/detail/list boost/fusion/container/list/detail/list/variadic_templates boost/fusion/container/map boost/fusion/container/map/detail/pp boost/fusion/container/set boost/fusion/container/set/detail/pp boost/fusion/container/vector boost/fusion/container/vector/detail boost/fusion/container/vector/detail/variadic_templates boost/fusion/mpl boost/fusion/mpl/detail boost/fusion/sequence/intrinsic boost/fusion/support boost/fusion/support/detail boost/fusion/support/detail/iterator_adapter boost/fusion/support/detail/pp boost/fusion/view/detail boost/fusion/view/filter_view boost/fusion/view/filter_view/detail boost/fusion/view/iterator_range boost/fusion/view/iterator_range/detail boost/fusion/view/joint_view boost/fusion/view/joint_view/detail boost/fusion/view/reverse_view boost/fusion/view/reverse_view/detail boost/fusion/view/single_view boost/fusion/view/single_view/detail boost/fusion/view/transform_view boost/fusion/view/transform_view/detail boost/fusion/view/zip_view boost/fusion/view/zip_view/detail libs/fusion/example/test libs/fusion/test/sequence
From: mr.chr.schmidt_at_[hidden]
Date: 2009-07-04 18:25:11
Author: cschmidt
Date: 2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
New Revision: 54655
URL: http://svn.boost.org/trac/boost/changeset/54655
Log:
added inter-it conversion
Added:
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/pp/
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/pp/unknown_key.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp   (contents, props changed)
Removed:
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/is_view.hpp
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/unknown_key.hpp
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/adapted/mpl/detail/advance_impl.hpp                            |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp                             |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp                                   |    20 ++--                                    
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp                                        |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp                                      |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp                                   |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/assoc_find.hpp                          |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp                             |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp                          |    14 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp                         |    14 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp                         |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp                        |    17 ++-                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp                            |    14 ++-                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp                         |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp                           |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp                         |    14 ++-                                     
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp                               |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/pair_tie.hpp                              |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp                                        |    85 ++++++++++------------                  
   sandbox/SOC/2009/fusion/boost/fusion/container/list/cons_iterator.hpp                               |   103 ++++++++-------------------             
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp                         |    10 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/begin_impl.hpp                      |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/convert_impl.hpp                    |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/deref_impl.hpp                      |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/empty_impl.hpp                      |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/end_impl.hpp                        |     6                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/next_impl.hpp                       |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/value_at_impl.hpp                   |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/at_impl.hpp                         |    10 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp                      |    11 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/convert_impl.hpp                    |    14 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp                        |    11 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/value_at_impl.hpp                   |     6                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/variadic_templates/as_list_impl.hpp |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp                                        |    21 ++--                                    
   sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/pp/lookup_key.hpp                         |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp                                          |    23 +++--                                   
   sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/lookup_key.hpp                         |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp                                          |    23 +++--                                   
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/advance_impl.hpp                       |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp                         |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/deref_impl.hpp                         |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp                           |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/next_impl.hpp                          |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/prior_impl.hpp                         |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_impl.hpp     |    31 ++++---                                 
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp                                    |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector_iterator.hpp                           |    20 ++++                                    
   sandbox/SOC/2009/fusion/boost/fusion/mpl/back.hpp                                                   |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/mpl/detail/at.hpp                                              |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp                                      |     6 -                                       
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp                                  |     6 -                                       
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp                                   |     6 -                                       
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp                                     |     6 -                                       
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp                                |     6 -                                       
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp                            |     6 -                                       
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/as_fusion_element.hpp                           |    67 ++++++----------                        
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/advance_impl.hpp               |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/deref_impl.hpp                 |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/next_impl.hpp                  |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/prior_impl.hpp                 |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/support/is_view.hpp                                            |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/support/iterator_adapter.hpp                                   |    28 +++++-                                  
   sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp                                                |    33 ++++++--                                
   sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp                                    |    60 +++------------                         
   sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/begin_impl.hpp                         |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/end_impl.hpp                           |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/next_impl.hpp                          |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp                               |    34 ++++++--                                
   sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view_iterator.hpp                      |    15 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/at_impl.hpp                         |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/begin_impl.hpp                      |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/end_impl.hpp                        |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp                         |    15 ++++                                    
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/begin_impl.hpp                          |    14 ++-                                     
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/deref_impl.hpp                          |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/end_impl.hpp                            |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/next_impl.hpp                           |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp                                 |    36 +++++----                               
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/advance_impl.hpp                      |     5                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/begin_impl.hpp                        |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/deref_impl.hpp                        |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/end_impl.hpp                          |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/next_impl.hpp                         |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp                             |    30 +++++--                                 
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp                         |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/deref_impl.hpp                         |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp                               |    54 +++++++++++--                           
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view_iterator.hpp                      |    31 ++++++--                                
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/advance_impl.hpp                    |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp                         |     7 +                                       
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/begin_impl.hpp                      |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp                      |    10 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/end_impl.hpp                        |    11 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/next_impl.hpp                       |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/prior_impl.hpp                      |    12 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp                         |    57 ++++++++++----                          
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view_iterator.hpp                |    42 ++++++++++-                             
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/advance_impl.hpp                          |     8 +                                       
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp                            |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp                              |    11 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/next_impl.hpp                             |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/prior_impl.hpp                            |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp                                     |    23 +++++                                   
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view_iterator.hpp                            |    22 ++++-                                   
   sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp                                           |   150 ++++++++++++++++++++++++++------------- 
   sandbox/SOC/2009/fusion/libs/fusion/test/sequence/filter_view.cpp                                   |     7 -                                       
   107 files changed, 864 insertions(+), 686 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/mpl/detail/advance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/mpl/detail/advance_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/mpl/detail/advance_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -35,7 +35,7 @@
                type;
 
                 static type
-                call(ItRef i)
+                call(ItRef)
                 {
                     return type();
                 }
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -42,7 +42,7 @@
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Seq, typename State, typename F>
     inline typename result_of::accumulate<
-        BOOST_FUSION_R_ELSE_LREF(Sequence)
+        BOOST_FUSION_R_ELSE_LREF(Seq)
       , BOOST_FUSION_R_ELSE_CLREF(State)
       , BOOST_FUSION_R_ELSE_LREF(F)
     >::type
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -36,39 +36,39 @@
         {};
     }
 
-    template <typename Sequence, typename State, typename F>
+    template <typename Seq, typename State, typename F>
     inline typename result_of::fold<
-        BOOST_FUSION_R_ELSE_LREF(Sequence)
+        BOOST_FUSION_R_ELSE_LREF(Seq)
       , BOOST_FUSION_R_ELSE_LREF(State)
       , BOOST_FUSION_R_ELSE_LREF(F)
     >::type
-    fold(BOOST_FUSION_R_ELSE_LREF(Sequence) seq,
+    fold(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
          BOOST_FUSION_R_ELSE_LREF(State) state,
          BOOST_FUSION_R_ELSE_LREF(F) f)
     {
         return detail::fold(
-                BOOST_FUSION_FORWARD(Sequence,seq),
+                BOOST_FUSION_FORWARD(Seq,seq),
                 BOOST_FUSION_FORWARD(State,state),
                 BOOST_FUSION_FORWARD(F,f),
-                typename traits::category_of<Sequence>::type());
+                typename traits::category_of<Seq>::type());
     }
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
-    template <typename Sequence, typename State, typename F>
+    template <typename Seq, typename State, typename F>
     inline typename result_of::fold<
-        BOOST_FUSION_R_ELSE_LREF(Sequence)
+        BOOST_FUSION_R_ELSE_LREF(Seq)
       , BOOST_FUSION_R_ELSE_CLREF(State)
       , BOOST_FUSION_R_ELSE_LREF(F)
     >::type
-    fold(BOOST_FUSION_R_ELSE_LREF(Sequence) seq,
+    fold(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
          BOOST_FUSION_R_ELSE_CLREF(State) state,
          BOOST_FUSION_R_ELSE_LREF(F) f)
     {
         return detail::fold(
-                BOOST_FUSION_FORWARD(Sequence,seq),
+                BOOST_FUSION_FORWARD(Seq,seq),
                 BOOST_FUSION_FORWARD(State,state),
                 BOOST_FUSION_FORWARD(F,f),
-                typename traits::category_of<Sequence>::type());
+                typename traits::category_of<Seq>::type());
     }
 #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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -19,7 +19,7 @@
 {
     namespace result_of
     {
-        template <typename Sequence, typename F>
+        template <typename Seq, typename F>
         struct any
         {
             typedef bool type;
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -18,7 +18,7 @@
 {
     namespace result_of
     {
-        template <typename Sequence, typename F>
+        template <typename Seq, typename F>
         struct count
         {
             typedef int type;
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -18,7 +18,7 @@
 {
     namespace result_of
     {
-        template <typename Sequence, typename F>
+        template <typename Seq, typename F>
         struct count_if
         {
             typedef int type;
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/assoc_find.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/assoc_find.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/assoc_find.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -28,9 +28,9 @@
         type;
 
         static type
-        call(SeqRef s)
+        call(SeqRef seq)
         {
-            return s.find_impl(mpl::identity<Key>());
+            return seq.find_impl(mpl::identity<Key>());
         }
     };
 }}}
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -19,7 +19,7 @@
 {
     namespace result_of
     {
-        template <typename Sequence>
+        template <typename Seq>
         struct clear
         {
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -17,25 +17,25 @@
 {
     namespace result_of
     {
-        template <typename Sequence>
+        template <typename Seq>
         struct pop_back
         {
             typedef 
                 iterator_range<
-                    typename begin<Sequence>::type
+                    typename begin<Seq>::type
                   , typename prior<
-                        typename end<Sequence>::type
+                        typename end<Seq>::type
                     >::type
                 > 
             type;
         };
     }
 
-    template <typename Sequence>
-    inline typename result_of::pop_back<Sequence const>::type
-    pop_back(Sequence const& seq)
+    template <typename Seq>
+    inline typename result_of::pop_back<Seq const&>::type
+    pop_back(Seq const& seq)
     {
-        typedef typename result_of::pop_back<Sequence const>::type result;
+        typedef typename result_of::pop_back<Seq const&>::type result;
         return result(fusion::begin(seq), fusion::prior(fusion::end(seq)));
     }
 }}
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -17,25 +17,25 @@
 {
     namespace result_of
     {
-        template <typename Sequence>
+        template <typename Seq>
         struct pop_front
         {
             typedef 
                 iterator_range<
                     typename next<
-                        typename begin<Sequence>::type
+                        typename begin<Seq>::type
                     >::type
-                  , typename end<Sequence>::type
+                  , typename end<Seq>::type
                 > 
             type;
         };
     }
 
-    template <typename Sequence>
-    inline typename result_of::pop_front<Sequence const>::type
-    pop_front(Sequence const& seq)
+    template <typename Seq>
+    inline typename result_of::pop_front<Seq const&>::type
+    pop_front(Seq const& seq)
     {
-        typedef typename result_of::pop_front<Sequence const>::type result;
+        typedef typename result_of::pop_front<Seq const&>::type result;
         return result(fusion::next(fusion::begin(seq)), fusion::end(seq));
     }
 }}
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -29,11 +29,11 @@
         };
     }
 
-    template <typename Sequence, typename T>
-    inline typename result_of::push_back<Sequence const&, T const&>::type
-    push_back(Sequence const& seq, T const& x)
+    template <typename Seq, typename T>
+    inline typename result_of::push_back<Seq const&, T const&>::type
+    push_back(Seq const& seq, T const& x)
     {
-        typedef typename result_of::push_back<Sequence const&, T const&> gen;
+        typedef result_of::push_back<Seq const&, T const&> gen;
 
         return typename gen::type(seq, x);
     }
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -16,19 +16,22 @@
 {
     namespace result_of
     {
-        template <typename Sequence, typename T>
+        template <typename Seq, typename T>
         struct push_front
         {
-            typedef fusion::single_view<typename detail::as_fusion_element<T>::type> single_view;
-            typedef joint_view<single_view const, Sequence> type;
+            typedef fusion::single_view<
+                typename detail::as_fusion_element<T>::type
+            > single_view;
+
+            typedef joint_view<single_view const, Seq> type;
         };
     }
 
-    template <typename Sequence, typename T>
-    inline typename result_of::push_front<Sequence const, T>::type
-    push_front(Sequence const& seq, T const& x)
+    template <typename Seq, typename T>
+    inline typename result_of::push_front<Seq const&, T>::type
+    push_front(Seq const& seq, T const& x)
     {
-        typedef typename result_of::push_front<Sequence const, T> push_front;
+        typedef typename result_of::push_front<Seq const&, T> push_front;
         typedef typename push_front::single_view single_view; 
         typedef typename push_front::type result; 
         single_view x_(x);
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -16,18 +16,20 @@
 {
     namespace result_of
     {
-        template <typename Sequence, typename T>
+        template <typename Seq, typename T>
         struct remove
         {
-            typedef filter_view<Sequence, mpl::not_<is_same<mpl::_, T> > > type;
+            typedef
+                filter_view<Seq&, mpl::not_<is_same<mpl::_, T> > >
+            type;
         };
     }
 
-    template <typename T, typename Sequence>
-    inline typename result_of::remove<Sequence const, T>::type
-    remove(Sequence const& seq)
+    template <typename T, typename Seq>
+    inline typename result_of::remove<Seq const&, T>::type
+    remove(Seq const& seq)
     {
-        typedef typename result_of::remove<Sequence const, T>::type result_type;
+        typedef typename result_of::remove<Seq const&, T>::type result_type;
         return result_type(seq);
     }
 }}
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -15,19 +15,19 @@
 {
     namespace result_of
     {
-        template <typename Sequence, typename Pred>
+        template <typename Seq, typename Pred>
         struct remove_if
         {
-            typedef filter_view<Sequence, mpl::not_<Pred> > type;
+            typedef filter_view<Seq, mpl::not_<Pred> > type;
         };
     }
 
-    template <typename Pred, typename Sequence>
-    inline typename result_of::remove_if<Sequence const, Pred>::type
-    remove_if(Sequence const& seq)
+    template <typename Pred, typename Seq>
+    inline typename result_of::remove_if<Seq const&, Pred>::type
+    remove_if(Seq const& seq)
     {
         typedef typename
-            result_of::remove_if<Sequence const, Pred>::type
+            result_of::remove_if<Seq const&, Pred>::type
         result_type;
         return result_type(seq);
     }
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -14,18 +14,18 @@
 {
     namespace result_of
     {
-        template <typename Sequence>
+        template <typename Seq>
         struct reverse
         {
-            typedef reverse_view<Sequence> type;
+            typedef reverse_view<Seq> type;
         };
     }
 
-    template <typename Sequence>
-    inline reverse_view<Sequence const>
-    reverse(Sequence const& view)
+    template <typename Seq>
+    inline reverse_view<Seq const&>
+    reverse(Seq const& view)
     {
-        return reverse_view<Sequence const>(view);
+        return reverse_view<Seq const&>(view);
     }
 }}
 
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -24,7 +24,7 @@
 
         template <typename Seq, typename F>
 #if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
-        struct transform<Sequence, F, void_>
+        struct transform<Seq, F, void_>
 #else
         struct transform<Seq, F>
 #endif
@@ -40,11 +40,15 @@
         return typename result_of::transform<Seq const&, F>::type(seq, f);
     }
 
-    template <typename Sequence1, typename Sequence2, typename F>
-    inline typename result_of::transform<Sequence1 const&, Sequence2 const&, F>::type
-    transform(Sequence1 const& seq1, Sequence2 const& seq2, F f)
+    template <typename Seq1, typename Seq2, typename F>
+    inline typename result_of::transform<Seq1 const&, Seq2 const&, F>::type
+    transform(Seq1 const& seq1, Seq2 const& seq2, F f)
     {
-        return typename result_of::transform<Sequence1 const&, Sequence2 const&, F>::type(seq1, seq2, f);
+        typedef typename
+            result_of::transform<Seq1 const&, Seq2 const&, F>::type
+        result;
+
+        return result(seq1, seq2, f);
     }
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -13,7 +13,6 @@
 #include <boost/fusion/adapted/mpl.hpp>
 #include <boost/fusion/container/vector.hpp>
 #include <boost/fusion/container/vector/convert.hpp>
-#include <boost/type_traits/add_reference.hpp>
 #include <boost/preprocessor/repetition/enum.hpp>
 #include <boost/preprocessor/repetition/enum_params.hpp>
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
@@ -63,7 +62,7 @@
 #endif
         {
             typedef mpl::vector< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) > sequences;
-            typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
+            typedef typename mpl::transform<sequences, detail::add_lref<mpl::_> >::type ref_params;
             typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
         };
     }
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -38,8 +38,9 @@
     pair_tie(BOOST_FUSION_R_ELSE_LREF(T) t)
     {
         typedef typename
-            result_of::pair_tie<Key, BOOST_FUSION_R_ELSE_LREF(Sequence)>::type
+            result_of::pair_tie<Key, BOOST_FUSION_R_ELSE_LREF(T)>::type
         type;
+
         return type(BOOST_FUSION_FORWARD(T,t));
     }
 
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -25,7 +25,6 @@
 #include <boost/fusion/container/list/detail/cons/value_at_impl.hpp>
 #include <boost/fusion/container/list/detail/cons/empty_impl.hpp>
 
-#include <boost/type_traits/is_convertible.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <boost/mpl/int.hpp>
 #include <boost/mpl/bool.hpp>
@@ -53,11 +52,10 @@
         {}
 
         nil(const nil&)
-        {
-        }
+        {}
 
-        template<typename Sequence>
-        nil(detail::sequence_assign_type<Sequence> const volatile&)
+        template<typename Seq>
+        nil(detail::sequence_assign_type<Seq> const volatile&)
         {
             //TODO cschmidt: assert!
         }
@@ -68,24 +66,22 @@
             //TODO cschmidt: assert!
         }
 
-        template<typename Iterator>
-        nil(detail::assign_by_deref,Iterator const&)
-        {
-        }
+        template<typename It>
+        nil(detail::assign_by_deref,It const&)
+        {}
 
-        template<typename Sequence>
+        template<typename Seq>
         nil&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(Sequence))
+        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq))
         {
             //TODO cschmidt: assert!
             return *this;
         }
 
-        template<typename Iterator>
+        template<typename It>
         void
-        assign(Iterator const&)
-        {
-        }
+        assign(It const&)
+        {}
     };
 
     template <typename Car, typename Cdr = nil>
@@ -104,29 +100,28 @@
           , cdr()
         {}
 
-        template<typename Cons>
-        cons(BOOST_FUSION_R_ELSE_CLREF(Cons) cons_,
-               typename enable_if<is_convertible<
-                   typename detail::remove_reference<Cons>::type*
-                 , cons const volatile*> >::type* =NULL)
-          //cschmidt: iterators so we do not have to deal with the cv-ness
-          //of cons_.car/cons_.cdr explicitly
-          : car(fusion::front(BOOST_FUSION_FORWARD(Cons,cons_)))
-          , cdr(detail::assign_by_deref(),
-                  fusion::next(
-                          fusion::begin(BOOST_FUSION_FORWARD(Cons,cons_))))
-        {
-        }
+        //cschmidt: iterators so we do not have to deal with the cv-ness
+        //of cons_.car/cons_.cdr explicitly
+#define CONS_CTOR(COMBINATION)\
+        cons(cons COMBINATION cons_)\
+          : car(fusion::front(BOOST_FUSION_FORWARD(cons COMBINATION,cons_)))\
+          , cdr(detail::assign_by_deref(),\
+                fusion::next(fusion::begin(\
+                        BOOST_FUSION_FORWARD(cons COMBINATION,cons_))))\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(CONS_CTOR);
+
+#undef CONS_CTOR
 
-        template<typename SequenceAssign>
-        cons(BOOST_FUSION_R_ELSE_CLREF(SequenceAssign) seq,
+        template<typename SeqAssign>
+        cons(BOOST_FUSION_R_ELSE_CLREF(SeqAssign) seq,
              typename enable_if<
-                 is_sequence_assign<SequenceAssign> >::type* =NULL)
+                 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&&)
@@ -135,8 +130,7 @@
              BOOST_FUSION_R_ELSE_CLREF(Iterator) iterator)
           : car(fusion::deref(iterator))
           , cdr(detail::assign_by_deref(),fusion::next(iterator))
-        {
-        }
+        {}
 
         /*
         template<typename Sequence>
@@ -144,8 +138,7 @@
                                 BOOST_FUSION_R_ELSE_CLREF(Sequence)>::type seq)
           : base(detail::assign_by_deref(),
                  fusion::begin(BOOST_FUSION_FORWARD(Sequence,seq)))
-        {
-        }
+        {}
         */
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
@@ -160,9 +153,7 @@
 #else
         template<typename OtherCar>
         explicit cons(OtherCar&& other_car,
-                typename disable_if<is_convertible<
-                    typename detail::remove_reference<OtherCar>::type*
-                  , cons const volatile*> >::type* =NULL)
+                typename disable_if<is_sequence_assign<OtherCar> >::type* =NULL)
           : car(std::forward<OtherCar>(other_car))
           , cdr()
         {}
@@ -174,20 +165,20 @@
         {}
 #endif
 
-        template<typename Sequence>
+        template<typename Seq>
         cons&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(Sequence) sequence)
+        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
         {
-            assign(fusion::begin(BOOST_FUSION_FORWARD(Sequence,sequence)));
+            assign(fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
             return *this;
         }
 
-        template<typename Iterator>
+        template<typename It>
         void
-        assign(Iterator const& iterator)
+        assign(It const& it)
         {
-            car=fusion::deref(iterator);
-            cdr.assign(fusion::next(iterator));
+            car=fusion::deref(it);
+            cdr.assign(fusion::next(it));
         }
 
         car_type car;
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/cons_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/cons_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/cons_iterator.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -32,11 +32,24 @@
         typedef forward_traversal_tag category;
         typedef Cons cons_type;
 
-        explicit cons_iterator(cons_type cons)
-          : cons(cons)
+        template<typename OtherIt>
+        cons_iterator(BOOST_FUSION_R_ELSE_CLREF(OtherIt) it)
+          : cons(it.cons)
         {}
 
-        cons_type cons;
+        cons_iterator(cons_type cons, int)
+          : cons(&cons)
+        {}
+
+        template<typename OtherIt>
+        cons_iterator&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherIt) other_it)
+        {
+            cons=other_it.cons;
+            return *this;
+        }
+
+        typename detail::remove_reference<cons_type>::type* cons;
     };
 
     struct nil_iterator
@@ -46,82 +59,28 @@
         typedef cons_iterator_tag fusion_tag;
         typedef nil cons_type;
 
-        nil_iterator() {}
-        explicit nil_iterator(nil const&)
-        {}
-    };
-
-    template <>
-    struct cons_iterator<nil&>
-      : nil_iterator
-    {
-        cons_iterator() {}
-        explicit cons_iterator(nil const&)
-        {}
-    };
-
-    template <>
-    struct cons_iterator<nil const&>
-      : nil_iterator
-    {
-        cons_iterator() {}
-        explicit cons_iterator(nil const&)
-        {}
-    };
-
-    template <>
-    struct cons_iterator<nil volatile&>
-      : nil_iterator
-    {
-        cons_iterator() {}
-        explicit cons_iterator(nil const&)
-        {}
-    };
-
-    template <>
-    struct cons_iterator<nil const volatile&>
-      : nil_iterator
-    {
-        cons_iterator() {}
-        explicit cons_iterator(nil const&)
+        nil_iterator()
         {}
-    };
 
-    template <>
-    struct cons_iterator<nil&&>
-      : nil_iterator
-    {
-        cons_iterator() {}
-        explicit cons_iterator(nil const&)
+        nil_iterator(nil const&,int)
         {}
     };
 
-    template <>
-    struct cons_iterator<nil const&&>
-      : nil_iterator
-    {
-        cons_iterator() {}
-        explicit cons_iterator(nil const&)
-        {}
-    };
+#define NIL_ITERATOR(COMBINATION)\
+      template <>\
+      struct cons_iterator<nil COMBINATION>\
+        : nil_iterator\
+      {\
+          cons_iterator()\
+          {}\
+          \
+          explicit cons_iterator(nil COMBINATION, int)\
+          {}\
+      };
 
-    template <>
-    struct cons_iterator<nil volatile&&>
-      : nil_iterator
-    {
-        cons_iterator() {}
-        explicit cons_iterator(nil const&)
-        {}
-    };
+    BOOST_FUSION_ALL_CV_REF_COMBINATIONS(NIL_ITERATOR)
 
-    template <>
-    struct cons_iterator<nil const volatile&&>
-      : nil_iterator
-    {
-        cons_iterator() {}
-        explicit cons_iterator(nil const&)
-        {}
-    };
+#undef NIL_ITERATOR
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -84,14 +84,14 @@
         template <>
         struct at_impl<cons_tag>
         {
-            template <typename Sequence, typename N>
+            template <typename SeqRef, typename N>
             struct apply
             {
                 typedef typename
-                    detail::cons_advance<Sequence, N::value>::type
+                    detail::cons_advance<SeqRef, N::value>::type
                 element;
                 typedef typename
-                    detail::result_of_forward_as<Sequence,element>::type
+                    detail::result_of_forward_as<SeqRef,element>::type
                 type;
 
                 template <typename Cons, int N2>
@@ -109,9 +109,9 @@
                 }
 
                 static type
-                call(Sequence s)
+                call(SeqRef seq)
                 {
-                    return call(s, mpl::int_<N::value>());
+                    return call(seq, mpl::int_<N::value>());
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -24,15 +24,15 @@
         template <>
         struct begin_impl<cons_tag>
         {
-            template <typename Sequence>
+            template <typename SeqRef>
             struct apply
             {
-                typedef cons_iterator<Sequence> type;
+                typedef cons_iterator<SeqRef> type;
 
                 static type
-                call(Sequence t)
+                call(SeqRef t)
                 {
-                    return type(t);
+                    return type(t,0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/convert_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/convert_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/convert_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -25,20 +25,20 @@
         template <>
         struct convert_impl<cons_tag>
         {
-            template <typename Sequence>
+            template <typename SeqRef>
             struct apply
             {
                 typedef
                     detail::build_cons<
-                        typename result_of::begin<Sequence>::type
-                      , typename result_of::end<Sequence>::type
+                        typename result_of::begin<SeqRef>::type
+                      , typename result_of::end<SeqRef>::type
                     >
                 build_cons;
 
                 typedef typename build_cons::type type;
 
                 static type
-                call(Sequence seq)
+                call(SeqRef seq)
                 {
                     return build_cons::call(
                             fusion::begin(seq),
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/deref_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/deref_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/deref_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -38,7 +38,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return i.cons.car;
+                    return i.cons->car;
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/empty_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/empty_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/empty_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -27,9 +27,9 @@
         template <>
         struct empty_impl<cons_tag>
         {
-            template <typename Sequence>
+            template <typename Seq>
             struct apply
-              : boost::is_same<typename detail::identity<Sequence>::type, nil>
+              : boost::is_same<typename detail::identity<Seq>::type, nil>
             {};
         };
     }
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/end_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -29,17 +29,17 @@
         template <>
         struct end_impl<cons_tag>
         {
-            template <typename Sequence>
+            template <typename Seq>
             struct apply
             {
                 typedef
                     cons_iterator<
-                        typename detail::result_of_forward_as<Sequence,nil>::type
+                        typename detail::result_of_forward_as<Seq,nil>::type
                     >
                 type;
 
                 static type
-                call(Sequence)
+                call(Seq)
                 {
                     return type();
                 }
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/next_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -24,11 +24,11 @@
         template <>
         struct next_impl<cons_iterator_tag>
         {
-            template <typename Iterator>
+            template <typename It>
             struct apply
             {
                 typedef typename
-                    detail::remove_reference<Iterator>::type::cons_type
+                    detail::remove_reference<It>::type::cons_type
                 cons_type;
                 typedef typename
                     detail::remove_reference<cons_type>::type::cdr_type
@@ -44,9 +44,9 @@
                 type;
 
                 static type
-                call(Iterator i)
+                call(It it)
                 {
-                    return type(i.cons.cdr);
+                    return type(it.cons->cdr,0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/value_at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/value_at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/value_at_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -22,11 +22,11 @@
         template <>
         struct value_at_impl<cons_tag>
         {
-            template <typename Sequence, typename N>
+            template <typename Seq, typename N>
             struct apply
             {
                 typedef typename
-                    detail::remove_reference<Sequence>::type
+                    detail::remove_reference<Seq>::type
                 identity_sequence;
 
                 typedef typename
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/at_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -20,13 +20,13 @@
         template <>
         struct at_impl<list_tag>
         {
-            template <typename Sequence, typename N>
+            template <typename SeqRef, typename N>
             struct apply
             {
                 typedef typename
                     detail::result_of_forward_as<
-                        Sequence
-                      , typename detail::remove_reference<Sequence>::type::storage_type
+                        SeqRef
+                      , typename detail::remove_reference<SeqRef>::type::storage_type
                    >::type
                 storage_type;
 
@@ -35,10 +35,10 @@
                 type;
 
                 static type
-                call(Sequence s)
+                call(SeqRef seq)
                 {
                     return fusion::at<N>(
-                            static_cast<storage_type&>(s.get_data()));
+                            static_cast<storage_type&>(seq.get_data()));
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -24,12 +24,12 @@
         template <>
         struct begin_impl<list_tag>
         {
-            template <typename Sequence>
+            template <typename SeqRef>
             struct apply
             {
                 typedef typename
-                    detail::result_of_forward_as<Sequence
-                      , typename detail::remove_reference<Sequence>::type::storage_type
+                    detail::result_of_forward_as<SeqRef
+                      , typename detail::remove_reference<SeqRef>::type::storage_type
                     >::type
                 storage_type;
 
@@ -41,10 +41,9 @@
                 type;
 
                 static type
-                call(Sequence s)
+                call(SeqRef seq)
                 {
-                    return fusion::begin(
-                            static_cast<storage_type>(s.get_data()));
+                    return type(fusion::begin(seq.get_data()),0);
                 }
             };
         };
Modified: 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	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/convert_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -26,27 +26,27 @@
         template <>
         struct convert_impl<list_tag>
         {
-            template <typename Sequence>
+            template <typename SeqRef>
             struct apply
             {
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
                 typedef typename
-                    detail::as_list<result_of::size<Sequence>::value>
+                    detail::as_list<result_of::size<Seq>::value>
                 gen;
                 typedef typename gen::template apply<
-                    typename result_of::begin<Sequence>::type>::type
+                    typename result_of::begin<Seq>::type>::type
                 type;
 
-                static type call(Sequence seq)
+                static type call(SeqRef seq)
                 {
                     return gen::call(
-                        fusion::begin(BOOST_FUSION_FORWARD(Sequence,seq)));
+                        fusion::begin(BOOST_FUSION_FORWARD(SeqRef,seq)));
                 }
 #else
-                typedef typename detail::as_list_impl<Sequence> gen;
+                typedef typename detail::as_list_impl<SeqRef> gen;
                 typedef typename gen::apply::type type;
 
-                static type call(Sequence seq)
+                static type call(SeqRef seq)
                 {
                     return gen::call(seq);
                 }
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -24,12 +24,12 @@
         template <>
         struct end_impl<list_tag>
         {
-            template <typename Sequence>
+            template <typename SeqRef>
             struct apply
             {
                 typedef typename
-                    detail::result_of_forward_as<Sequence
-                      , typename detail::remove_reference<Sequence>::type::storage_type
+                    detail::result_of_forward_as<SeqRef
+                      , typename detail::remove_reference<SeqRef>::type::storage_type
                     >::type
                 storage_type;
 
@@ -41,10 +41,9 @@
                 type;
 
                 static type
-                call(Sequence s)
+                call(SeqRef seq)
                 {
-                    return fusion::end(
-                            static_cast<storage_type>(s.get_data()));
+                    return type(fusion::end(seq.get_data()),0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/value_at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/value_at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/value_at_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -20,13 +20,13 @@
         template <>
         struct value_at_impl<list_tag>
         {
-            template <typename Sequence, typename N>
+            template <typename SeqRef, typename N>
             struct apply
             {
                 typedef typename
                     detail::result_of_forward_as<
-                        Sequence
-                      , typename detail::remove_reference<Sequence>::type::storage_type
+                        SeqRef
+                      , typename detail::remove_reference<SeqRef>::type::storage_type
                    >::type
                 storage_type;
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/variadic_templates/as_list_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/variadic_templates/as_list_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/variadic_templates/as_list_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -16,7 +16,7 @@
 
 namespace boost { namespace fusion { namespace detail
 {
-    template<typename Sequence>
+    template<typename SeqRef>
     struct as_list_impl
     {
         struct apply
@@ -25,17 +25,17 @@
                 mpl::apply<
                     mpl::unpack_args<variadic_quote<list> >
                   , typename detail::to_random_access_mpl_seq<
-                        typename detail::remove_reference<Sequence>::type
+                        typename detail::remove_reference<SeqRef>::type
                     >::type
                 >::type
             type;
         };
 
         static typename apply::type
-        call(Sequence sequence)
+        call(SeqRef seq)
         {
             return typename apply::type(
-                    sequence_assign(BOOST_FUSION_FORWARD(Sequence,sequence)));
+                    sequence_assign(BOOST_FUSION_FORWARD(SeqRef,seq)));
         }
     };
 }}}
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -14,8 +14,6 @@
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/ref.hpp>
 
-#include <boost/type_traits/is_convertible.hpp>
-
 #include <boost/fusion/container/list/detail/list/begin_impl.hpp>
 #include <boost/fusion/container/list/detail/list/end_impl.hpp>
 #include <boost/fusion/container/list/detail/list/at_impl.hpp>
@@ -46,26 +44,27 @@
           : data()
         {}
 
-        template<typename List>
-        list(BOOST_FUSION_R_ELSE_CLREF(List) list_,
-               typename enable_if<is_convertible<
-                   typename detail::remove_reference<List>::type*
-                 , list const volatile*> >::type* =NULL)
-          : data(BOOST_FUSION_FORWARD(List,list_).data)
-        {
+#define LIST_CTOR(COMBINATION)\
+        list(list COMBINATION list_)\
+          : data(BOOST_FUSION_FORWARD(list COMBINATION,list_).data)\
+        {\
         }
 
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(LIST_CTOR)
+
+#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))
+          : data(BOOST_FUSION_FORWARD(Arg,arg))
         {}
 
 #   include <boost/fusion/container/list/detail/list/pp/list_forward_ctor.hpp>
 #else
         template <typename... OtherArguments>
         list(BOOST_FUSION_R_ELSE_CLREF(OtherArguments)... other_arguments)
-            : data(BOOST_FUSION_FORWARD(OtherArguments,other_arguments)...)
+          : data(BOOST_FUSION_FORWARD(OtherArguments,other_arguments)...)
         {}
 #endif
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/pp/lookup_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/pp/lookup_key.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/pp/lookup_key.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -10,7 +10,7 @@
 
 #include <boost/type_traits/add_const.hpp>
 #include <boost/type_traits/add_reference.hpp>
-#include <boost/fusion/support/detail/unknown_key.hpp>
+#include <boost/fusion/support/detail/pp/unknown_key.hpp>
 
 namespace boost { namespace fusion
 {
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -132,15 +132,16 @@
         map()
             : data() {}
 
-        template<typename Map>
-        map(BOOST_FUSION_R_ELSE_CLREF(Map) map_,
-               typename enable_if<is_convertible<
-                   typename detail::remove_reference<Map>::type*
-                 , map const volatile*> >::type* =NULL)
-          : data(BOOST_FUSION_FORWARD(Map,map_).data)
-        {
+#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)
@@ -169,18 +170,18 @@
         typename meta_find_impl_const<Key>::type
         find_impl(mpl::identity<Key>) const
         {
-            return typename meta_find_impl_const<Key>::type(data);
+            return typename meta_find_impl_const<Key>::type(data,0);
         }
 
         template <typename Key>
         typename meta_find_impl<Key>::type
         find_impl(mpl::identity<Key>)
         {
-            return typename meta_find_impl<Key>::type(data);
+            return typename meta_find_impl<Key>::type(data,0);
         }
 
         template <class Key>
-        typename add_reference<typename meta_at_impl<Key>::type>::type
+        typename detail::add_lref<typename meta_at_impl<Key>::type>::type
         at_impl(mpl::identity<Key>)
         {
             return data.at_impl(
@@ -188,7 +189,7 @@
         }
 
         template <class Key>
-        typename add_reference<
+        typename detail::add_lref<
             typename add_const<typename meta_at_impl<Key>::type>::type
             >::type
         at_impl(mpl::identity<Key>) const
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/lookup_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/lookup_key.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/pp/lookup_key.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -8,7 +8,7 @@
 #ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_PP_LOOKUP_KEY_HPP
 #define BOOST_FUSION_CONTAINER_SET_DETAIL_PP_LOOKUP_KEY_HPP
 
-#include <boost/fusion/support/detail/unknown_key.hpp>
+#include <boost/fusion/support/detail/pp/unknown_key.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -106,15 +106,16 @@
         set()
             : data() {}
 
-        template<typename Set>
-        set(BOOST_FUSION_R_ELSE_CLREF(Set) set_,
-               typename enable_if<is_convertible<
-                   typename detail::remove_reference<Set>::type*
-                 , set const volatile*> >::type* =NULL)
-          : data(BOOST_FUSION_FORWARD(Set,set_).data)
-        {
+#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)
@@ -143,25 +144,25 @@
         typename meta_find_impl_const<Key>::type
         find_impl(mpl::identity<Key>) const
         {
-            return typename meta_find_impl_const<Key>::type(data);
+            return typename meta_find_impl_const<Key>::type(data,0);
         }
 
         template <typename Key>
         typename meta_find_impl<Key>::type
         find_impl(mpl::identity<Key>)
         {
-            return typename meta_find_impl<Key>::type(data);
+            return typename meta_find_impl<Key>::type(data,0);
         }
 
         template <class Key>
-        typename add_reference<Key>::type
+        typename detail::add_lref<Key>::type
         at_impl(mpl::identity<Key>)
         {
             return data.at_impl(typename meta_find_impl<Key>::type::index());
         }
 
         template <class Key>
-        typename add_reference<typename add_const<Key>::type>::type
+        typename detail::add_lref<typename add_const<Key>::type>::type
         at_impl(mpl::identity<Key>) const
         {
             return data.at_impl(
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/advance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/advance_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/advance_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -36,7 +36,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return type(BOOST_FUSION_FORWARD(vector,i.vec));
+                    return type(*i.vec,0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -26,7 +26,7 @@
                 static type
                 call(Sequence v)
                 {
-                    return type(BOOST_FUSION_FORWARD(Sequence,v));
+                    return type(BOOST_FUSION_FORWARD(Sequence,v),0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/deref_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/deref_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/deref_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -44,7 +44,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return i.vec.at_impl(index());
+                    return i.vec->at_impl(index());
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -29,7 +29,7 @@
                 static type
                 call(Sequence v)
                 {
-                    return type(BOOST_FUSION_FORWARD(Sequence,v));
+                    return type(BOOST_FUSION_FORWARD(Sequence,v),0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/next_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -37,7 +37,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return type(i.vec);
+                    return type(*i.vec,0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/prior_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/prior_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/prior_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -36,7 +36,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return type(BOOST_FUSION_FORWARD(vector,i.vec));
+                    return type(*i.vec,0);
                 }
             };
         };
Modified: 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	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -15,8 +15,6 @@
 #include <boost/fusion/support/assign_tags.hpp>
 
 #include <boost/mpl/int.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/utility/enable_if.hpp>
 
 #include <utility>
 
@@ -120,13 +118,13 @@
             }
 #endif
 
-            typename add_reference<Head>::type
+            typename detail::add_lref<Head>::type
             at_impl(mpl::int_<Index>)
             {
                 return _element;
             }
 
-            typename add_reference<typename add_const<Head>::type>::type
+            typename detail::add_lref<typename add_const<Head>::type>::type
             at_impl(mpl::int_<Index>)const
             {
                 return _element;
@@ -154,16 +152,17 @@
         {
         }
 
-        template<typename Vec>
-        vector(BOOST_FUSION_R_ELSE_CLREF(Vec) vec,
-               typename enable_if<is_convertible<
-                   typename detail::remove_reference<Vec>::type*
-                 , vector const volatile*> >::type* =NULL)
-          : base(detail::assign_by_deref(),
-                 fusion::begin(BOOST_FUSION_FORWARD(Vec,vec)))
-        {
+#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 SequenceAssign>
         vector(BOOST_FUSION_R_ELSE_CLREF(SequenceAssign) seq,
                typename enable_if<
@@ -208,14 +207,18 @@
         }
 
         template<typename I>
-        typename mpl::at<types, I>::type&
+        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 add_const<typename mpl::at<types, I>::type>::type&
+        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>());
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -91,7 +91,7 @@
         }
 
         template <int N>
-        typename add_reference<
+        typename detail::add_lref<
             typename mpl::at_c<types, N>::type
         >::type
         at_impl(mpl::int_<N> index)
@@ -100,7 +100,7 @@
         }
 
         template <int N>
-        typename add_reference<
+        typename detail::add_lref<
             typename add_const<
                 typename mpl::at_c<types, N>::type
             >::type
@@ -111,7 +111,7 @@
         }
 
         template <typename I>
-        typename add_reference<
+        typename detail::add_lref<
             typename mpl::at<types, I>::type
         >::type
         at_impl(I index)
@@ -120,7 +120,7 @@
         }
 
         template<typename I>
-        typename add_reference<
+        typename detail::add_lref<
             typename add_const<
                 typename mpl::at<types, I>::type
             >::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector_iterator.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -31,6 +31,7 @@
     template <typename Vector, int N>
     struct vector_iterator_identity;
 
+    //TODO VecRef!
     template <typename Vector, int N>
     struct vector_iterator
       : iterator_base<vector_iterator<Vector, N> >
@@ -45,11 +46,24 @@
               , N>
         identity;
 
-        explicit vector_iterator(Vector vec)
-          : vec(vec)
+        template<typename OtherVecIt>
+        vector_iterator(BOOST_FUSION_R_ELSE_CLREF(OtherVecIt) it)
+          : vec(it.vec)
         {}
 
-        Vector vec;
+        vector_iterator(Vector vec, int)
+          : vec(&vec)
+        {}
+
+        template<typename OtherVecIt>
+        vector_iterator&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherVecIt) it)
+        {
+            vec=it.vec;
+            return *this;
+        }
+
+        typename detail::remove_reference<Vector>::type* vec;
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/mpl/back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/mpl/back.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/mpl/back.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -21,11 +21,11 @@
     template <>
     struct back_impl<fusion::fusion_sequence_tag>
     {
-        template <typename Sequence>
+        template <typename SeqRef>
         struct apply
           : fusion::result_of::value_of<
                 typename fusion::result_of::prior<
-                    typename fusion::result_of::end<Sequence>::type
+                    typename fusion::result_of::end<SeqRef>::type
                 >::type
             >
         {};
Modified: sandbox/SOC/2009/fusion/boost/fusion/mpl/detail/at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/mpl/detail/at.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/mpl/detail/at.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -25,9 +25,9 @@
         template <>
         struct at_impl<fusion::fusion_sequence_tag>
         {
-            template <typename Sequence, typename N>
+            template <typename SeqRef, typename N>
             struct apply
-              : fusion::result_of::value_at<Sequence, N>
+              : fusion::result_of::value_at<SeqRef, N>
             {};
         };
     }
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -22,11 +22,7 @@
     namespace extension
     {
         template <typename Tag>
-        struct at_impl
-        {
-            template <typename Sequence, typename N>
-            struct apply;
-        };
+        struct at_impl;
 
         template <>
         struct at_impl<sequence_facade_tag>
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -21,11 +21,7 @@
     namespace extension
     {
         template <typename Tag>
-        struct at_key_impl
-        {
-            template <typename Sequence, typename Key>
-            struct apply;
-        };
+        struct at_key_impl;
 
         template <>
         struct at_key_impl<sequence_facade_tag>
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -19,11 +19,7 @@
     namespace extension
     {
         template <typename Tag>
-        struct begin_impl
-        {
-            template <typename Sequence>
-            struct apply;
-        };
+        struct begin_impl;
 
         template <>
         struct begin_impl<sequence_facade_tag>
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -19,11 +19,7 @@
     namespace extension
     {
         template <typename Tag>
-        struct end_impl
-        {
-            template <typename Sequence>
-            struct apply;
-        };
+        struct end_impl;
 
         template <>
         struct end_impl<sequence_facade_tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -21,11 +21,7 @@
     namespace extension
     {
         template <typename Tag>
-        struct value_at_impl
-        {
-            template <typename Sequence, typename N>
-            struct apply;
-        };
+        struct value_at_impl;
 
         template <>
         struct value_at_impl<sequence_facade_tag>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -22,11 +22,7 @@
     namespace extension
     {
         template <typename Tag>
-        struct value_at_key_impl
-        {
-            template <typename Sequence, typename Key>
-            struct apply;
-        };
+        struct value_at_key_impl;
 
         template <>
         struct value_at_key_impl<sequence_facade_tag>
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -11,9 +11,13 @@
 
 //TODO cschmidt: rref
 
-#include <boost/ref.hpp>
 #include <boost/fusion/support/ref.hpp>
 
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/ref.hpp>
+
 namespace boost { namespace fusion { namespace detail
 {
     template <typename T>
@@ -22,31 +26,15 @@
         typedef T type;
     };
 
-    template <typename T>
-    struct as_fusion_element<T&>
-        : as_fusion_element<T>
-    {
-    };
+#define CV_REF_SPECIALISATION(COMBINATION)\
+    template <typename T>\
+    struct as_fusion_element<T COMBINATION>\
+      : as_fusion_element<T>\
+    {};
 
-    template <typename T>
-    struct as_fusion_element<const T&>
-        : as_fusion_element<T>
-    {
-    };
-
-#ifndef BOOST_NO_RVALUE_REFERENCES
-    template <typename T>
-    struct as_fusion_element<T&&>
-        : as_fusion_element<T>
-    {
-    };
+    BOOST_FUSION_ALL_CV_REF_COMBINATIONS(CV_REF_SPECIALISATION)
 
-    template <typename T>
-    struct as_fusion_element<const T&&>
-        : as_fusion_element<T>
-    {
-    };
-#endif
+#undef CV_REF_SPECIALISATION
 
     template <typename T>
     struct as_fusion_element<reference_wrapper<T> >
@@ -55,7 +43,7 @@
     };
 
     template <typename T>
-    struct as_fusion_element<const reference_wrapper<T> >
+    struct as_fusion_element<reference_wrapper<T> const>
     {
         typedef T& type;
     };
@@ -63,40 +51,37 @@
     template <typename T, int N>
     struct as_fusion_element<T[N]>
     {
-        typedef const T(&type)[N];
+        typedef const typename as_fusion_element<T>::type(&type)[N];
     };
 
     template <typename T, int N>
     struct as_fusion_element<volatile T[N]>
     {
-        typedef const volatile T(&type)[N];
+        typedef const volatile typename as_fusion_element<T>::type(&type)[N];
     };
 
     template <typename T, int N>
     struct as_fusion_element<const volatile T[N]>
     {
-        typedef const volatile T(&type)[N];
+        typedef const volatile typename as_fusion_element<T>::type(&type)[N];
     };
 
     template <typename T>
     struct as_fusion_element_lref
     {
+        typedef typename as_fusion_element<T>::type element;
+
         typedef typename
-            add_lref<typename as_fusion_element<T>::type>::type
+            mpl::if_<
+                mpl::and_<
+                    is_lrref<T>
+                  , is_same<typename identity<T>::type,element>
+                >
+              , T
+              , typename add_lref<element>::type
+            >::type
         type;
     };
-
-    template <typename T>
-    struct as_fusion_element_lref<const T&>
-      : as_fusion_element_lref<const T>
-    {
-    };
-
-    template <typename T>
-    struct as_fusion_element_lref<const T&&>
-      : as_fusion_element_lref<const T>
-    {
-    };
 }}}
 
 #endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/support/detail/is_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/detail/is_view.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
+++ (empty file)
@@ -1,20 +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_SUPPORT_DETAIL_IS_VIEW_HPP
-#define BOOST_FUSION_SUPPORT_DETAIL_IS_VIEW_HPP
-
-namespace boost { namespace fusion { namespace detail
-{
-    template <typename T>
-    struct fusion_is_view
-    {
-        typedef typename detail::remove_reference<T>::type::is_view type;
-    };
-}}}
-
-#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/advance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/advance_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/advance_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -48,8 +48,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return fusion::advance<N>(
-                            static_cast<iterator_type>(i.iterator));
+                    return type(fusion::advance<N>(i.it),0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/deref_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/deref_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/deref_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -37,8 +37,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return fusion::deref(
-                            static_cast<iterator_type>(i.iterator));
+                    return fusion::deref(i.it);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/next_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -46,7 +46,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return fusion::next(static_cast<iterator_type>(i.iterator));
+                    return type(fusion::next(i.it),0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/prior_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/prior_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/detail/iterator_adapter/prior_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -46,8 +46,7 @@
                 static type
                 call(Iterator i)
                 {
-                    return fusion::prior(
-                            static_cast<iterator_type>(i.iterator));
+                    return type(fusion::prior(i.it),0);
                 }
             };
         };
Added: sandbox/SOC/2009/fusion/boost/fusion/support/detail/pp/unknown_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/detail/pp/unknown_key.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -0,0 +1,17 @@
+/*=============================================================================
+    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_SUPPORT_DETAIL_PP_UNKNOWN_KEY_HPP
+#define BOOST_FUSION_SUPPORT_DETAIL_PP_UNKNOWN_KEY_HPP
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <int index>
+    struct unknown_key {};
+}}}
+
+#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/support/detail/unknown_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/detail/unknown_key.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
+++ (empty file)
@@ -1,17 +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_SUPPORT_DETAIL_UNKNOWN_KEY_HPP
-#define BOOST_FUSION_SUPPORT_DETAIL_UNKNOWN_KEY_HPP
-
-namespace boost { namespace fusion { namespace detail
-{
-    template <int index>
-    struct unknown_key {};
-}}}
-
-#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/is_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/is_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/is_view.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -22,20 +22,22 @@
         template<typename Tag>
         struct is_view_impl
         {
-            template <typename T>
+            template <typename SeqRef>
             struct apply
-                : detail::fusion_is_view<T>
+              :  detail::remove_reference<SeqRef>::type::is_view
             {};
         };
 
+        /*
         template <>
         struct is_view_impl<sequence_facade_tag>
         {
-            template <typename Sequence>
+            template <typename SeqRef>
             struct apply
-                : detail::remove_reference<Sequence>::type::is_view
+                : detail::remove_reference<SeqRef>::type::is_view
             {};
         };
+        */
     }
 
     namespace traits
@@ -43,7 +45,7 @@
         template <typename T>
         struct is_view :
             extension::is_view_impl<typename fusion::traits::tag_of<T>::type>::
-                template apply<T>::type
+                template apply<typename detail::add_lref<T>::type>::type
         {};
     }
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/iterator_adapter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/iterator_adapter.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/iterator_adapter.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -9,7 +9,6 @@
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/iterator_base.hpp>
 
-
 #include <boost/fusion/support/detail/iterator_adapter/deref_impl.hpp>
 #include <boost/fusion/support/detail/iterator_adapter/value_of_impl.hpp>
 #include <boost/fusion/support/detail/iterator_adapter/next_impl.hpp>
@@ -22,17 +21,32 @@
 {
     struct iterator_adapter_tag;
 
-    template<typename Iterator, typename NewCategory>
+    template<typename It, typename NewCategory>
     struct iterator_adapter
-      : iterator_base<iterator_adapter<Iterator, NewCategory> >
+      : iterator_base<iterator_adapter<It, NewCategory> >
     {
         typedef iterator_adapter_tag fusion_tag;
         typedef NewCategory category;
-        typedef Iterator iterator_type;
+        typedef It iterator_type;
+
+        template<typename OtherIt>
+        iterator_adapter(BOOST_FUSION_R_ELSE_CLREF(OtherIt) it)
+          : it(it.it)
+        {}
+
+        iterator_adapter(It const& it, int)
+          : it(it)
+        {}
+
+        template<typename OtherIt>
+        iterator_adapter&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherIt) other_it)
+        {
+            it=other_it.it;
+            return *this;
+        }
 
-        iterator_adapter(Iterator iterator)
-            : iterator(BOOST_FUSION_FORWARD(Iterator,iterator)) {}
-        Iterator iterator;
+        It it;
     };
 }}
 
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -37,6 +37,12 @@
 #   define BOOST_FUSION_OBJ_ELSE_CLREF(OBJECT) OBJECT const&
 
 #   define BOOST_FUSION_FORWARD(TYPE,ARGUMENT) ARGUMENT
+
+#   define BOOST_FUSION_ALL_CV_REF_COMBINATIONS(MACRO)\
+        MACRO(&)\
+        MACRO(const &)\
+        MACRO(volatile&)\
+        MACRO(const volatile&)
 #else
 #   include <utility>
 
@@ -47,6 +53,19 @@
 #   define BOOST_FUSION_OBJ_ELSE_CLREF(OBJECT) OBJECT
 
 #   define BOOST_FUSION_FORWARD(TYPE,ARGUMENT) std::forward<TYPE>(ARGUMENT)
+
+    //cschmidt: This macro could be workaround with a single function using
+    //enable if and is_convertible. This is a lot slower than five overloads/
+    //specialisations though.
+#   define BOOST_FUSION_ALL_CV_REF_COMBINATIONS(MACRO)\
+        MACRO(&)\
+        MACRO(const&)\
+        MACRO(volatile&)\
+        MACRO(const volatile&)\
+        MACRO(&&)\
+        MACRO(const&&)\
+        MACRO(volatile&&)\
+        MACRO(const volatile&&)
 #endif
 
 namespace boost { namespace fusion { namespace detail
@@ -151,13 +170,6 @@
             >::type&
         type;
     };
-
-    /*template <typename,typename Type>
-    Type
-    forward_as(Type type)
-    {
-        return type;
-    }*/
 #else
     template <typename TestType,typename Type>
     struct result_of_forward_as
@@ -178,9 +190,10 @@
                          //rvalue refs!
                        , mpl::not_<is_rref<TestType> >
                 >,
-                mpl::if_<is_rref<TestType>
-                       , real_type&&
-                       , real_type&
+                mpl::eval_if<
+                         is_rref<TestType>
+                       , mpl::identity<real_type&&>
+                       , detail::add_lref<real_type>
                 >,
                 mpl::identity<real_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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -9,6 +9,7 @@
 #include <boost/fusion/support/ref.hpp>
 
 #include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
 
 namespace boost{namespace fusion{
 
@@ -44,62 +45,27 @@
     {
     };
 
-#ifndef BOOST_NO_RVALUE_REFERENCES
-    template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq> const&>
-      : mpl::true_
-    {
+#   define IS_SEQUENCE_ASSIGN(COMBINATION)\
+    template<typename Seq>\
+    struct is_sequence_assign<detail::sequence_assign_type<Seq> COMBINATION>\
+      : mpl::true_\
+    {\
     };
 
-    template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq> const volatile&>
-      : mpl::true_
-    {
-    };
+    BOOST_FUSION_ALL_CV_REF_COMBINATIONS(IS_SEQUENCE_ASSIGN);
 
-    template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq> volatile&>
-      : mpl::true_
-    {
-    };
+#   undef IS_SEQUENCE_ASSIGN
 
     template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq>&>
-      : mpl::true_
-    {
-    };
-
-    template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq> const&&>
-      : mpl::true_
-    {
-    };
-
-    template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq> const volatile&&>
-      : mpl::true_
-    {
-    };
-
-    template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq> volatile&&>
-      : mpl::true_
-    {
-    };
-
-    template<typename Seq>
-    struct is_sequence_assign<detail::sequence_assign_type<Seq>&&>
-      : mpl::true_
-    {
-    };
-
-    template<typename Seq>
-    detail::sequence_assign_type<BOOST_FUSION_R_ELSE_LREF(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)
     {
         return seq;
     }
-#endif
 }}
 
 #endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -0,0 +1,121 @@
+// 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_VIEW_DETAIL_VIEW_STORAGE_HPP
+#define BOOST_FUSION_VIEW_DETAIL_VIEW_STORAGE_HPP
+
+#include <boost/fusion/support/is_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template<typename T>
+    struct view_storage
+    {
+    private:
+        template<typename OtherT>
+        static typename
+            enable_if<
+                traits::is_view<T>
+              , BOOST_FUSION_R_ELSE_LREF(OtherT)
+            >::type
+        get_init_type(BOOST_FUSION_R_ELSE_LREF(OtherT) other_t)
+        {
+            return other_t;
+        }
+
+        template<typename OtherT>
+        static typename
+            disable_if<
+                traits::is_view<T>
+              , typename detail::remove_reference<OtherT>::type*
+            >::type
+        get_init_type(BOOST_FUSION_R_ELSE_LREF(OtherT) other_t)
+        {
+            return &other_t;
+        }
+
+    public:
+        typedef typename
+            mpl::if_<
+                traits::is_view<T>
+              , typename detail::remove_reference<T>::type
+              , typename detail::add_lref<T>::type
+            >::type
+        type;
+
+#define VIEW_STORAGE_CTOR(COMBINATION)\
+        template<typename OtherT>\
+        view_storage(view_storage<OtherT> COMBINATION storage)\
+          : t(get_init_type(storage.get()))\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(VIEW_STORAGE_CTOR)
+
+#undef VIEW_STORAGE_CTOR
+
+        template<typename OtherT>
+        view_storage(BOOST_FUSION_R_ELSE_LREF(OtherT) other_t)
+          : t(get_init_type(BOOST_FUSION_FORWARD(OtherT,other_t)))
+        {}
+
+        template<typename OtherViewStorage>
+        view_storage&
+        operator=(BOOST_FUSION_R_ELSE_LREF(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 const&, type>::type
+        get() const
+        {
+            return get(typename traits::is_view<T>::type());
+        }
+
+    private:
+        type&
+        get(mpl::true_ /*is_view*/)
+        {
+            return t;
+        }
+
+        type
+        get(mpl::false_ /*is_view*/)
+        {
+            return *t;
+        }
+
+        type const&
+        get(mpl::true_ /*is_view*/)const
+        {
+            return t;
+        }
+
+        type
+        get(mpl::false_ /*is_view*/)const
+        {
+            return *t;
+        }
+
+        typedef typename detail::remove_reference<T>::type non_ref_t;
+        typename
+            mpl::if_<traits::is_view<T>, non_ref_t, non_ref_t*>::type
+        t;
+    };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -46,9 +46,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return type(fusion::begin(s.seq));
+                    return type(fusion::begin(seq.seq.get()),0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/end_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -45,9 +45,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return type(fusion::end(s.seq));
+                    return type(fusion::end(seq.seq.get()),0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/next_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -49,9 +49,9 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(filter::call(i.first));
+                    return type(filter::call(it.first),0);
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -8,11 +8,13 @@
 #ifndef BOOST_FUSION_VIEW_FILTER_VIEW_FILTER_VIEW_HPP
 #define BOOST_FUSION_VIEW_FILTER_VIEW_FILTER_VIEW_HPP
 
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/is_view.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/view/detail/view_storage.hpp>
+
 #include <boost/mpl/bool.hpp>
 
 #include <boost/fusion/view/filter_view/filter_view_iterator.hpp>
@@ -35,21 +37,33 @@
         typedef forward_traversal_tag category;
         typedef mpl::true_ is_view;
 
-        typedef typename
-            mpl::if_<
-                traits::is_view<Seq>
-              , typename detail::identity<Seq>::type
-              , typename detail::add_lref<Seq>::type
-            >::type
-        seq_type;
+        typedef typename detail::view_storage<Seq>::type seq_type;
         typedef Pred pred_type;
 
+#define FILTER_VIEW_CTOR(COMBINATION)\
+        template<typename OtherSeq>\
+        filter_view(filter_view<OtherSeq, Pred> COMBINATION view)\
+          : seq(static_cast<filter_view<OtherSeq, Pred> COMBINATION>(view).seq)\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(FILTER_VIEW_CTOR)
+
+#undef FILTER_VIEW_CTOR
+
         template<typename OtherSeq>
         explicit filter_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq) other_seq)
           : seq(BOOST_FUSION_FORWARD(OtherSeq,other_seq))
         {}
 
-        seq_type seq;
+        template<typename OtherFilterView>
+        filter_view&
+        operator=(BOOST_FUSION_R_ELSE_LREF(OtherFilterView) other_view)
+        {
+            seq=BOOST_FUSION_FORWARD(OtherFilterView,other_view).seq;
+            return *this;
+        }
+
+        detail::view_storage<Seq> seq;
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view_iterator.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -33,10 +33,23 @@
         typedef Last last_type;
         typedef Pred pred_type;
 
-        filter_iterator(First const& first)
+        template<typename OtherFilterIt>
+        filter_iterator(BOOST_FUSION_R_ELSE_CLREF(OtherFilterIt) it)
+          : first(it.first)
+        {}
+
+        filter_iterator(First const& first,int)
           : first(filter::call(first))
         {}
 
+        template<typename OtherFilterIt>
+        filter_iterator&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherFilterIt) it)
+        {
+            first=it.first;
+            return *this;
+        }
+
         first_type first;
     };
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/at_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -33,9 +33,9 @@
                 typedef typename result_of::deref<pos>::type type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return *advance<N>(s.first);
+                    return *advance<N>(seq.first);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -28,9 +28,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return s.first;
+                    return seq.first;
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/detail/end_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -28,9 +28,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return s.last;
+                    return seq.last;
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -38,11 +38,26 @@
         typedef Last end_type;
         typedef typename traits::category_of<First>::type category;
 
+        template<typename OtherIteratorRange>
+        iterator_range(BOOST_FUSION_R_ELSE_LREF(OtherIteratorRange) other_range)
+          : first(other_range.first)
+          , last(other_range.last)
+        {}
+
         iterator_range(First const& first, Last const& last)
           : first(first)
           , last(last)
         {}
 
+        template<typename OtherIteratorRange>
+        iterator_range&
+        operator=(BOOST_FUSION_R_ELSE_LREF(OtherIteratorRange) other_range)
+        {
+            first=other_range.first;
+            last=other_range.last;
+            return *this;
+        }
+
         begin_type first;
         end_type last;
     };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -53,21 +53,23 @@
                 type;
 
                 static type
-                call(SeqRef s, mpl::true_)
+                call(SeqRef seq, mpl::true_)
                 {
-                    return fusion::begin(s.seq2);
+                    return fusion::begin(seq.seq2.get());
                 }
 
                 static type
-                call(SeqRef s, mpl::false_)
+                call(SeqRef seq, mpl::false_)
                 {
-                    return type(fusion::begin(s.seq1),fusion::begin(s.seq2));
+                    return type(
+                            fusion::begin(seq.seq1.get())
+                          , fusion::begin(seq.seq2.get()));
                 }
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return call(s, equal_to());
+                    return call(seq, equal_to());
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/deref_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/deref_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/deref_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -34,9 +34,9 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return fusion::deref(i.first);
+                    return fusion::deref(it.first);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/end_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -36,9 +36,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return fusion::end(s.seq2);
+                    return fusion::end(seq.seq2.get());
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/next_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -46,21 +46,21 @@
                 type;
 
                 static type
-                call(ItRef i, mpl::true_)
+                call(ItRef it, mpl::true_)
                 {
-                    return i.concat;
+                    return it.concat;
                 }
 
                 static type
-                call(ItRef i, mpl::false_)
+                call(ItRef it, mpl::false_)
                 {
-                    return type(fusion::next(i.first), i.concat);
+                    return type(fusion::next(it.first), it.concat);
                 }
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return call(i, equal_to());
+                    return call(it, equal_to());
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -14,6 +14,7 @@
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/is_view.hpp>
+#include <boost/fusion/view/detail/view_storage.hpp>
 
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/plus.hpp>
@@ -41,20 +42,8 @@
         typedef forward_traversal_tag category;
         typedef mpl::true_ is_view;
 
-        typedef typename
-            mpl::if_<
-                traits::is_view<Seq1>
-              , typename detail::remove_reference<Seq1>::type
-              , typename detail::add_lref<Seq1>::type
-            >::type
-        seq1_type;
-        typedef typename
-            mpl::if_<
-                traits::is_view<Seq2>
-              , typename detail::remove_reference<Seq2>::type
-              , typename detail::add_lref<Seq2>::type
-            >::type
-        seq2_type;
+        typedef typename detail::view_storage<Seq1>::type seq1_type;
+        typedef typename detail::view_storage<Seq2>::type seq2_type;
 
         typedef typename
             mpl::plus<
@@ -63,6 +52,12 @@
             >::type
         size;
 
+        template<typename OtherJointView>
+        joint_view(BOOST_FUSION_R_ELSE_LREF(OtherJointView) other_view)
+          : seq1(BOOST_FUSION_FORWARD(OtherJointView,other_view).seq1)
+          , seq2(BOOST_FUSION_FORWARD(OtherJointView,other_view).seq2)
+        {}
+
         template<typename OtherSeq1, typename OtherSeq2>
         joint_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq1) other_seq1,
                 BOOST_FUSION_R_ELSE_LREF(OtherSeq2) other_seq2)
@@ -70,8 +65,17 @@
           , seq2(BOOST_FUSION_FORWARD(OtherSeq2,other_seq2))
         {}
 
-        seq1_type seq1;
-        seq2_type seq2;
+        template<typename OtherJointView>
+        OtherJointView&
+        operator=(BOOST_FUSION_R_ELSE_LREF(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;
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/advance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/advance_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/advance_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -41,9 +41,10 @@
                 typedef reverse_view_iterator<advanced_type> type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(boost::fusion::advance<negative_dist>(i.first));
+                    return type(
+                            boost::fusion::advance<negative_dist>(it.first));
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -39,9 +39,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return type(fusion::end(s.seq));
+                    return type(fusion::end(seq.seq.get()));
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/deref_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/deref_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/deref_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -37,9 +37,9 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return fusion::deref(fusion::prior(i.first));
+                    return fusion::deref(fusion::prior(it.first));
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/end_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -41,9 +41,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return type(fusion::begin(s.seq));
+                    return type(fusion::begin(seq.seq.get()));
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/next_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -36,9 +36,9 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(fusion::prior(i.first));
+                    return type(fusion::prior(it.first));
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -16,6 +16,7 @@
 #include <boost/fusion/support/category_of.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/view/detail/view_storage.hpp>
 
 #include <boost/type_traits/is_base_of.hpp>
 #include <boost/mpl/bool.hpp>
@@ -37,13 +38,7 @@
         typedef fusion_sequence_tag tag; // this gets picked up by MPL
         typedef mpl::true_ is_view;
 
-        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 detail::view_storage<Seq>::type seq_type;
         typedef typename traits::category_of<seq_type>::type category;
         typedef typename result_of::size<seq_type>::type size;
 
@@ -52,12 +47,31 @@
         //            typename traits::category_of<first_type>::type>::value),
         //    "underlying iterator must be bidirectional");
 
+#define REVERSE_VIEW_CTOR(COMBINATION)\
+        template<typename OtherSeq>\
+        reverse_view(reverse_view<OtherSeq> COMBINATION other_view)\
+          : seq(BOOST_FUSION_FORWARD(\
+                reverse_view<OtherSeq> COMBINATION,other_view).seq)\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(REVERSE_VIEW_CTOR)
+
+#undef REVERSE_VIEW_CTOR
+
         template<typename OtherSeq>
         explicit reverse_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq) other_seq)
           : seq(BOOST_FUSION_FORWARD(OtherSeq,other_seq))
         {}
 
-        seq_type seq;
+        template<typename OtherReverseView>
+        OtherReverseView&
+        operator=(BOOST_FUSION_R_ELSE_LREF(OtherReverseView) other_view)
+        {
+            seq=BOOST_FUSION_FORWARD(OtherReverseView,other_view).seq;
+            return *this;
+        }
+
+        detail::view_storage<Seq> seq;
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -31,7 +31,7 @@
                 static type
                 call(Sequence s)
                 {
-                    return type(s);
+                    return type(s,0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/deref_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/deref_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/deref_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -33,7 +33,7 @@
                 static type
                 call(Iterator const& i)
                 {
-                    return i.view.val;
+                    return i.view->val;
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -8,15 +8,18 @@
 #ifndef BOOST_FUSION_VIEW_SINGLE_VIEW_SINGLE_VIEW_HPP
 #define BOOST_FUSION_VIEW_SINGLE_VIEW_SINGLE_VIEW_HPP
 
+//TODO save views directly
 //TODO as fusion element?!
+//TODO bidirectional
 
+#include <boost/fusion/sequence/intrinsic/front.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/sequence_assign.hpp>
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
 
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/int.hpp>
-#include <boost/type_traits/is_convertible.hpp>
 #include <boost/utility/enable_if.hpp>
 
 #include <boost/fusion/view/single_view/single_view_iterator.hpp>
@@ -44,24 +47,55 @@
           : val()
         {}
 
-        single_view(single_view const& single_view)
-          : val(single_view.val)
+#define SINGLE_VIEW_CTOR(COMBINATION)\
+        single_view(single_view COMBINATION view)\
+          : val(BOOST_FUSION_FORWARD(single_view COMBINATION,view).val)\
         {}
 
-        //TODO !!!
-        single_view(single_view& single_view)
-          : val(single_view.val)
-        {}
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(SINGLE_VIEW_CTOR)
+
+#undef SINGLE_VIEW_CTOR
 
-        single_view(single_view&& single_view)
-          : val(single_view.val)
+        template<typename SeqAssign>
+        single_view(BOOST_FUSION_R_ELSE_CLREF(SeqAssign) seq,
+            typename enable_if<
+                 is_sequence_assign<BOOST_FUSION_R_ELSE_CLREF(SeqAssign)>
+            >::type* =NULL)
+          : val(fusion::front(seq.get()))
         {}
 
         template<typename OtherT>
-        explicit single_view(BOOST_FUSION_R_ELSE_CLREF(OtherT) val)
+        explicit single_view(BOOST_FUSION_R_ELSE_CLREF(OtherT) val,
+            typename disable_if<
+                    is_sequence_assign<BOOST_FUSION_R_ELSE_CLREF(OtherT)>
+            >::type* =NULL)
           : val(BOOST_FUSION_FORWARD(OtherT,val))
         {}
 
+        template<typename OtherT>
+        typename
+            disable_if<
+                is_sequence_assign<BOOST_FUSION_R_ELSE_CLREF(OtherT)>
+              , single_view&
+            >::type
+        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_CLREF(SeqAssign)>
+              , single_view&
+            >::type
+        operator=(BOOST_FUSION_R_ELSE_CLREF(SeqAssign) seq)
+        {
+            val=fusion::front(seq.get());
+            return *this;
+        }
+
         value_type val;
     };
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view_iterator.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -28,26 +28,41 @@
         typedef forward_traversal_tag category;
     };
 
-    template <typename SingleView>
+    template <typename SingleViewRef>
     struct single_view_iterator
-      : iterator_base<single_view_iterator<SingleView> >
+      : iterator_base<single_view_iterator<SingleViewRef> >
     {
         typedef single_view_iterator_tag fusion_tag;
         typedef forward_traversal_tag category;
 
-        typedef SingleView view_type;
+        typedef SingleViewRef view_type;
         typedef typename
             detail::result_of_forward_as<
-                SingleView,
-                typename detail::remove_reference<SingleView>::type::value_type
+                SingleViewRef,
+                typename detail::remove_reference<
+                    SingleViewRef
+                >::type::value_type
             >::type
         value_type;
 
-        explicit single_view_iterator(SingleView view)
-          : view(view)
+        template<typename OtherSingleViewIt>
+        single_view_iterator(BOOST_FUSION_R_ELSE_CLREF(OtherSingleViewIt) it)
+          : view(it.view)
         {}
 
-        SingleView view;
+        single_view_iterator(SingleViewRef view, int)
+          : view(&view)
+        {}
+
+        template<typename OtherSingleViewIt>
+        single_view_iterator&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherSingleViewIt) it)
+        {
+            view=it.view;
+            return *this;
+        }
+
+        typename detail::remove_reference<SingleViewRef>::type* view;
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/advance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/advance_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/advance_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -49,9 +49,9 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(boost::fusion::advance<Dist>(i.first), i.f);
+                    return type(boost::fusion::advance<Dist>(it.first), *it.f);
                 }
             };
         };
@@ -82,11 +82,11 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(boost::fusion::advance<Dist>(i.first1)
-                              , boost::fusion::advance<Dist>(i.first2)
-                              , i.f);
+                    return type(boost::fusion::advance<Dist>(it.first1)
+                              , boost::fusion::advance<Dist>(it.first2)
+                              , it.f);
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -47,7 +47,7 @@
                 static type
                 call(SeqRef seq)
                 {
-                    return seq.f(boost::fusion::at<N>(seq.seq));
+                    return seq.f(boost::fusion::at<N>(seq.seq.get()));
                 }
             };
         };
@@ -78,8 +78,9 @@
 
                 static type call(SeqRef seq)
                 {
-                    return seq.f(boost::fusion::at<N>(seq.seq1),
-                            boost::fusion::at<N>(seq.seq2));
+                    return seq.f(
+                            boost::fusion::at<N>(seq.seq1.get()),
+                            boost::fusion::at<N>(seq.seq2.get()));
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/begin_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -46,9 +46,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return type(fusion::begin(s.seq), s.f);
+                    return type(fusion::begin(seq.seq.get()), seq.f);
                 }
             };
         };
@@ -74,12 +74,12 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
                     return type(
-                            fusion::begin(s.seq1),
-                            fusion::begin(s.seq2),
-                            s.f);
+                            fusion::begin(seq.seq1.get()),
+                            fusion::begin(seq.seq2.get()),
+                            seq.f);
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -48,7 +48,7 @@
                 static type
                 call(ItRef it)
                 {
-                    return it.f(fusion::deref(it.first));
+                    return (*it.f)(fusion::deref(it.first));
                 }
             };
         };
@@ -77,11 +77,11 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return i.f(
-                            fusion::deref(i.first1)
-                          , fusion::deref(i.first2));
+                    return (*it.f)(
+                            fusion::deref(it.first1)
+                          , fusion::deref(it.first2));
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/end_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -44,9 +44,9 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return type(fusion::end(s.seq), s.f);
+                    return type(fusion::end(seq.seq.get()), seq.f);
                 }
             };
         };
@@ -72,9 +72,12 @@
                 type;
 
                 static type
-                call(SeqRef s)
+                call(SeqRef seq)
                 {
-                    return type(fusion::end(s.seq1), fusion::end(s.seq2), s.f);
+                    return type(
+                            fusion::end(seq.seq1.get())
+                          , fusion::end(seq.seq2.get())
+                          , seq.f);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/next_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -45,9 +45,9 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(fusion::next(i.first), i.f);
+                    return type(fusion::next(it.first), *it.f);
                 }
             };
         };
@@ -74,11 +74,11 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(fusion::next(i.first1),
-                            fusion::next(i.first2),
-                            i.f);
+                    return type(fusion::next(it.first1),
+                            fusion::next(it.first2),
+                            *it.f);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/prior_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/prior_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/prior_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -46,9 +46,9 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(fusion::prior(i.first), i.f);
+                    return type(fusion::prior(it.first), *it.f);
                 }
             };
         };
@@ -77,11 +77,11 @@
                 type;
 
                 static type
-                call(ItRef i)
+                call(ItRef it)
                 {
-                    return type(fusion::prior(i.first1),
-                            fusion::prior(i.first2),
-                            i.f);
+                    return type(fusion::prior(it.first1),
+                            fusion::prior(it.first2),
+                            it.f);
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -12,7 +12,6 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/sequence/intrinsic/size.hpp>
-#include <boost/fusion/view/detail/strictest_traversal.hpp>
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
 #   include <boost/fusion/container/vector/vector10.hpp>
 #else
@@ -23,6 +22,8 @@
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/is_view.hpp>
 #include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/view/detail/strictest_traversal.hpp>
+#include <boost/fusion/view/detail/view_storage.hpp>
 
 #include <boost/mpl/bool.hpp>
 
@@ -49,20 +50,8 @@
         //       result_of::size<Sequence1>,==,result_of::size<Sequence2>,
         //       "both sequences must have the same length");
 
-        typedef typename
-            mpl::if_<
-                traits::is_view<Seq1>
-              , typename detail::remove_reference<Seq1>::type
-              , typename detail::add_lref<Seq1>::type
-            >::type
-        seq1_type;
-        typedef typename
-            mpl::if_<
-                traits::is_view<Seq2>
-              , typename detail::remove_reference<Seq2>::type
-              , typename detail::add_lref<Seq2>::type
-            >::type
-        seq2_type;
+        typedef typename detail::view_storage<Seq1>::type seq1_type;
+        typedef typename detail::view_storage<Seq2>::type seq2_type;
         typedef F transform_type;
 
         typedef transform_view2_tag fusion_tag;
@@ -79,6 +68,13 @@
         category;
         typedef typename result_of::size<seq1_type>::type size;
 
+        template<typename OtherTransformView>
+        transform_view(BOOST_FUSION_R_ELSE_LREF(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)
+        {}
+
         template<typename OtherSeq1, typename OtherSeq2,typename OtherF>
         transform_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq1) seq1,
                 BOOST_FUSION_R_ELSE_LREF(OtherSeq2) seq2,
@@ -88,8 +84,18 @@
           , f(BOOST_FUSION_FORWARD(OtherF,f))
         {}
 
-        seq1_type seq1;
-        seq2_type seq2;
+        template<typename OtherTransformView>
+        OtherTransformView&
+        operator=(BOOST_FUSION_R_ELSE_LREF(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;
+            return *this;
+        }
+
+        detail::view_storage<Seq1> seq1;
+        detail::view_storage<Seq2> seq2;
         transform_type f;
     };
 
@@ -118,6 +124,12 @@
         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)
+          : seq(BOOST_FUSION_FORWARD(OtherTransformView,view).seq)
+          , f(BOOST_FUSION_FORWARD(OtherTransformView,view).f)
+        {}
+
         template<typename OtherSeq, typename OtherF>
         transform_view(BOOST_FUSION_R_ELSE_LREF(OtherSeq) seq,
                 BOOST_FUSION_R_ELSE_LREF(OtherF) f)
@@ -125,7 +137,16 @@
           , f(BOOST_FUSION_FORWARD(OtherF,f))
         {}
 
-        seq_type seq;
+        template<typename OtherTransformView>
+        OtherTransformView&
+        operator=(BOOST_FUSION_R_ELSE_LREF(OtherTransformView) view)
+        {
+            seq=BOOST_FUSION_FORWARD(OtherTransformView,view).seq;
+            f=BOOST_FUSION_FORWARD(OtherTransformView,view).f;
+            return *this;
+        }
+
+        detail::view_storage<Seq> seq;
         transform_type f;
     };
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view_iterator.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -35,13 +35,29 @@
         typedef transform_view_iterator_tag fusion_tag;
         typedef typename traits::category_of<first_type>::type category;
 
+        template<typename OtherTransformViewIt>
+        transform_view_iterator(
+                BOOST_FUSION_R_ELSE_CLREF(OtherTransformViewIt) it)
+          : first(it.first)
+          , f(it.f)
+        {}
+
         transform_view_iterator(First const& first, transform_type f)
           : first(first)
-          , f(f)
+          , f(&f)
         {}
 
+        template<typename OtherTransformViewIt>
+        transform_view_iterator&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherTransformViewIt) it)
+        {
+            first=it.first;
+            f=it.f;
+            return *this;
+        }
+
         first_type first;
-        transform_type f;
+        typename detail::remove_reference<transform_type>::type* f;
     };
 
     // Binary Version
@@ -58,17 +74,35 @@
         typedef transform_view_iterator2_tag fusion_tag;
         typedef typename traits::category_of<first1_type>::type category;
 
+        template<typename OtherTransformViewIt>
+        transform_view_iterator2(
+                BOOST_FUSION_R_ELSE_CLREF(OtherTransformViewIt) it)
+          : first1(it.first1)
+          , first2(it.first2)
+          , f(it.f)
+        {}
+
         transform_view_iterator2(First1 const& first1,
                 First2 const& first2,
                 FRef f)
           : first1(first1)
           , first2(first2)
-          , f(f)
+          , f(&f)
         {}
 
+        template<typename OtherTransformViewIt>
+        transform_view_iterator2&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherTransformViewIt) it)
+        {
+            first1=it.first1;
+            first2=it.first2;
+            f=it.f;
+            return *this;
+        }
+
         first1_type first1;
         first2_type first2;
-        transform_type f;
+        typename detail::remove_reference<transform_type>::type* f;
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/advance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/advance_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/advance_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -65,8 +65,12 @@
                 static type
                 call(ItRef it)
                 {
-                    return type(fusion::transform(
-                            it.iterators_, detail::poly_advance<N>()));
+                    return type(
+                        fusion::transform(
+                                it.iterators_
+                              , detail::poly_advance<N>()
+                        )
+                      , 0);
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -38,8 +38,7 @@
                            , result_of::begin<SeqRef>
                 >
             {
-                //TODO cschmidt: !!!
-                BOOST_MPL_ASSERT((is_reference<SeqRef>));
+                BOOST_MPL_ASSERT((detail::is_lrref<SeqRef>));
             };
 
             template<typename Seq>
@@ -85,8 +84,9 @@
                 static type
                 call(SeqRef seq)
                 {
-                    return type(fusion::transform(
-                            seq.seqs, detail::poly_begin()));
+                    return type(
+                            fusion::transform(seq.seqs, detail::poly_begin())
+                          , 0);
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -50,7 +50,7 @@
                            , get_endpoint<SeqRef, M>
                 >
             {
-                BOOST_MPL_ASSERT((is_reference<SeqRef>));
+                BOOST_MPL_ASSERT((detail::is_lrref<SeqRef>));
             };
 
             template<typename Seq>
@@ -95,9 +95,12 @@
                 static type
                 call(SeqRef seq)
                 {
-                    return type(fusion::transform(
-                            seq.seqs,
-                            detail::endpoints<typename seq::size>()));
+                    return type(
+                            fusion::transform(
+                                    seq.seqs
+                                  , detail::endpoints<typename seq::size>()
+                            )
+                          , 0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/next_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -82,7 +82,8 @@
                 call(ItRef it)
                 {
                     return type(
-                        fusion::transform(it.iterators_, detail::poly_next()));
+                        fusion::transform(it.iterators_, detail::poly_next())
+                      , 0);
                 }
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/prior_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/prior_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/prior_impl.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -82,7 +82,8 @@
                 call(ItRef it)
                 {
                     return type(
-                        fusion::transform(it.iterators_, detail::poly_prior()));
+                        fusion::transform(it.iterators_, detail::poly_prior())
+                      , 0);
                 }
             };
         };
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-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -108,7 +108,7 @@
     struct zip_view
       : sequence_base< zip_view<Seqs> >
     {
-        //TODO cschmidt: ?!
+        //TODO cschmidt: replace view& with view
         typedef typename
             result_of::remove<Seqs, unused_type const&>::type
         real_seqs;
@@ -132,11 +132,30 @@
             fusion::result_of::as_vector<Seqs>::type
         seqs_type;
 
+#define ZIP_VIEW_CTOR(COMBINATION)\
+        template<typename OtherSeqs>\
+        zip_view(zip_view<OtherSeqs> COMBINATION other_view)\
+          : seqs(sequence_assign(BOOST_FUSION_FORWARD(\
+                zip_view<OtherSeqs> COMBINATION,other_view).seq))\
+        {}
+
+        BOOST_FUSION_ALL_CV_REF_COMBINATIONS(ZIP_VIEW_CTOR)
+
+#undef ZIP_VIEW_CTOR
+
         template<typename OtherSeqs>
         explicit zip_view(BOOST_FUSION_R_ELSE_LREF(OtherSeqs) other_seqs)
-          : seqs(BOOST_FUSION_FORWARD(OtherSeqs,other_seqs))
+          : seqs(sequence_assign(BOOST_FUSION_FORWARD(OtherSeqs,other_seqs)))
         {}
 
+        template<typename OtherZipView>
+        zip_view&
+        operator=(BOOST_FUSION_R_ELSE_LREF(OtherZipView) other_zip_view)
+        {
+            seqs=BOOST_FUSION_FORWARD(OtherZipView,other_zip_view).seqs;
+            return *this;
+        }
+
         seqs_type seqs;
     };
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view_iterator.hpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -33,18 +33,26 @@
         typedef zip_view_iterator_tag fusion_tag;
         typedef Traversal category;
 
-        //TODO !!!
-        zip_view_iterator(BOOST_FUSION_R_ELSE_CLREF(zip_view_iterator) it)
-          : iterators_(std::move(it._iterators_))
-        {
-        }
+        template<typename OtherZipViewIt>
+        zip_view_iterator(BOOST_FUSION_R_ELSE_CLREF(OtherZipViewIt) it)
+          : iterators_(sequence_assign(
+                  BOOST_FUSION_FORWARD(OtherZipViewIt,it).iterators_))
+        {}
 
         template<typename InitSeq>
-        zip_view_iterator(BOOST_FUSION_R_ELSE_CLREF(InitSeq) iterator_seq)
+        zip_view_iterator(BOOST_FUSION_R_ELSE_CLREF(InitSeq) seq,int)
           : iterators_(
-                sequence_assign(BOOST_FUSION_FORWARD(InitSeq,iterator_seq)))
+                sequence_assign(BOOST_FUSION_FORWARD(InitSeq,seq)))
         {}
 
+        template<typename OtherZipViewIt>
+        zip_view_iterator&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherZipViewIt) it)
+        {
+            iterators_=BOOST_FUSION_FORWARD(OtherZipViewIt,it).iterators_;
+            return *this;
+        }
+
         typedef typename result_of::as_vector<ItSeq>::type iterators;
         iterators iterators_;
     };
Modified: sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -7,42 +7,30 @@
 #include <utility>
 #include <iostream>
 
-#include <boost/fusion/adapted/mpl.hpp>
-#include <boost/fusion/container/vector/vector10.hpp>
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/iterator.hpp>
+//#include <boost/fusion/algorithm.hpp>
+#include <boost/fusion/container.hpp>
+#include <boost/fusion/view.hpp>
 
-#include <boost/fusion/container/set.hpp>
-#include <boost/fusion/sequence/intrinsic/at_key.hpp>
-
-#include <boost/fusion/container/vector.hpp>
-#include <boost/fusion/container/vector/convert.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/iterator/deref.hpp>
-#include <boost/fusion/iterator/next.hpp>
-#include <boost/mpl/vector.hpp>
-#include <boost/fusion/container/generation/make_vector.hpp>
-#include <boost/fusion/container/generation/vector_tie.hpp>
-
-#include <boost/fusion/container/map.hpp>
-#include <boost/fusion/container/generation/make_map.hpp>
-
-#include <boost/fusion/container/list/list.hpp>
-#include <boost/fusion/container/list/cons.hpp>
-#include <boost/fusion/container/generation/make_cons.hpp>
-
-#include <boost/fusion/sequence/io/out.hpp>
-
-#include <boost/fusion/view/zip_view.hpp>
+#include <boost/mpl/placeholders.hpp>
 
 namespace fusion=boost::fusion;
 
-template<class... Args> class get_vec_type
+struct moveable
 {
-public:
-    typedef fusion::result_of::as_vector<boost::mpl::vector<char,float> >::type type;
-    //typedef fusion::vector<Args...> type;
+    moveable()=default;
+    moveable(const moveable&)=delete;
+    moveable(moveable&&){}
 };
 
-typedef get_vec_type<char,short,int,long,float,double>::type vec;
+template<class... Args>
+struct get_vec_type
+{
+    typedef fusion::vector<Args...> type;
+};
+
+typedef get_vec_type<char,short,int,long,float,double,moveable>::type vec;
 typedef const vec cvec;
 
 typedef vec& lvec;
@@ -50,12 +38,71 @@
 typedef const vec& clvec;
 typedef const vec&& crvec;
 
-class moveable
+template<typename Seq>
+void seq_test(Seq&& seq)
 {
-public:
-    moveable()=default;
-    moveable(const moveable&)=delete;
-    moveable(moveable&&){}
+    using namespace fusion;
+
+    typedef typename detail::identity<Seq>::type id_seq;
+
+    typename result_of::begin<id_seq>::type beg=begin(std::forward<Seq>(seq));
+    typename result_of::begin<const id_seq>::type cbeg=begin(std::forward<Seq>(seq));
+
+    typename result_of::begin<id_seq&>::type beg2=begin(std::forward<Seq>(seq));
+    typename result_of::begin<const id_seq&>::type cbeg2=begin(std::forward<Seq>(seq));
+
+    typename result_of::begin<id_seq&&>::type beg3=begin(std::forward<Seq>(seq));
+    typename result_of::begin<const id_seq&&>::type cbeg3=begin(std::forward<Seq>(seq));
+
+    beg=beg;
+    cbeg=beg;
+
+    beg2=beg2;
+    cbeg2=beg2;
+
+    beg3=beg3;
+    cbeg3=beg3;
+
+    beg=beg2;
+    beg=beg3;
+    cbeg=beg2;
+    cbeg=cbeg2;
+    cbeg=beg3;
+    cbeg=cbeg3;
+
+    beg2=beg;
+    beg2=beg3;
+    cbeg2=beg;
+    cbeg2=cbeg;
+    cbeg2=beg3;
+    cbeg2=cbeg3;
+
+    beg3=beg2;
+    beg3=beg;
+    cbeg3=beg2;
+    cbeg3=cbeg2;
+    cbeg3=beg;
+    cbeg3=cbeg;
+
+    //beg=cbeg2;
+
+    deref(begin(std::forward<Seq>(seq)));
+    advance_c<1>(begin(std::forward<Seq>(seq)));
+    end(std::forward<Seq>(seq));
+}
+
+struct identity_int
+{
+    template<typename>
+    struct result
+    {
+        typedef int type;
+    };
+
+    int operator()(int i)
+    {
+        return i;
+    }
 };
 
 int main()
@@ -73,27 +120,26 @@
     }
 
     {
-        using namespace fusion;
-        vector<moveable> m;
-        vector<moveable> m2=std::move(m);
-        m=std::move(m2);
-
-        int i=0;
-        make_vector(boost::cref(i));
+        vec v;
+        vec v2=std::move(v);
+        //vec v2=v;
     }
 
     {
         using namespace fusion;
-        set<int,float,double> s(0,0,0);
-        at_key<int>(s)=0;
-    }
-
-    {
-        using namespace fusion;
-        std::cout << deref(begin(make_map<int>(1))) << std::endl;
-
-        map<pair<char,char>,pair<int,int> > m('X', 123);
-        std::cout << m << std::endl;
-        std::cout << make_map<char, int>('X', 123) << std::endl;
+        seq_test(make_vector(0,1));
+        seq_test(make_cons(0,make_cons(1)));
+        seq_test(make_list(0,1));
+        seq_test(make_set(0,1.0f));
+        seq_test(make_map<int,float>(0,1.0f));
+
+        seq_test(single_view<int>(0));
+        seq_test(filter_view<vector<int>&&,std::is_same<boost::mpl::_,int> >(vector<int>()));
+        vector<int> vec;
+        seq_test(iterator_range<result_of::begin<vector<int>>::type,result_of::end<vector<int>>::type>(begin(vec),end(vec)));
+        seq_test(joint_view<vector<int>&&,vector<int>&&>(vector<int>(),vector<int>()));
+        seq_test(zip_view<vector<vector<int>&&, vector<int>&&> >(vector_tie(vector<int>(),vector<int>())));
+        seq_test(transform_view<vector<int>&&,identity_int>(vector<int>(),identity_int()));
+        seq_test(reverse_view<vector<int>&&>(vector<int>()));
     }
 }
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/sequence/filter_view.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/sequence/filter_view.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/sequence/filter_view.cpp	2009-07-04 18:24:58 EDT (Sat, 04 Jul 2009)
@@ -72,12 +72,9 @@
         typedef result_of::begin<vector_type>::type begin;
         typedef result_of::end<vector_type>::type end;
         typedef detail::static_find_if<begin, end, is_same<_, long> > filter;
-        typedef filter::type type;
 
-        BOOST_TEST(*type(v) == 987654);
-        std::cout << *type(v) << std::endl;
-        std::cout << *filter::call(begin(v)) << std::endl;
-        BOOST_TEST(*type(v) == *filter::call(begin(v)));
+        std::cout << *filter::call(boost::fusion::begin(v)) << std::endl;
+        BOOST_TEST(*filter::call(boost::fusion::begin(v)) == 987654);
     }
 
     {