$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r57341 - in sandbox/SOC/2009/fusion/boost/fusion: adapted/detail/mpl adapted/detail/struct algorithm/query/detail algorithm/transformation algorithm/transformation/detail container/detail container/detail/pp container/detail/variadic_templates container/generation/detail/pp container/list container/list/detail container/list/detail/cons container/list/detail/list container/list/detail/pp container/list/detail/variadic_templates container/map container/set container/vector/detail/pp container/vector/detail/variadic_templates sequence/intrinsic/ext_ support support/internal/variadic_templates tuple view/filter_view view/joint_view view/nview view/repetitive_view view/repetitive_view/detail view/reverse_view view/reverse_view/detail view/single_view view/single_view/detail view/transform_view view/transform_view/detail
From: mr.chr.schmidt_at_[hidden]
Date: 2009-11-03 13:29:19
Author: cschmidt
Date: 2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
New Revision: 57341
URL: http://svn.boost.org/trac/boost/changeset/57341
Log:
cleanup (2)
Added:
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/forward_interface.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/forward_interface.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/begin_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/build_cons.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_fwd.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_gen.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_iterator.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/convert_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/deref_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/end_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/equal_to_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/next_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/value_at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/value_of_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/variadic_templates/
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/variadic_templates/cons_gen.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/value_at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/distance_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/prior_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/value_at_impl.hpp   (contents, props changed)
Removed:
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/forward_ctor.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/forward_ctor.hpp
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/tag_of.hpp                                          |     8 +++                                     
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/category_of_impl.hpp                             |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp                                    |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp                                       |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp                    |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp                              |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp                                      |     4 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp                                 |     4 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp                                         |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp                            |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp                                                |    33 ++++++++---------                       
   sandbox/SOC/2009/fusion/boost/fusion/container/list/convert.hpp                                             |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp                                                |    71 ++++++++++++++++---------------------   
   sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp                                            |     4 --                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp                                                  |    24 +-----------                            
   sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp                                              |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp                                                  |    24 +-----------                            
   sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp                                              |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector.hpp                                  |    26 +------------                           
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp                                |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp                  |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/ext_/size_s.hpp                                     |    14 ++++--                                  
   sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp                                                |     4 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector.hpp   |     5 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector_c.hpp |     5 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp                                                        |    19 +---------                              
   sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp                                       |    12 ++++-                                   
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp                                         |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp                                                   |     5 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/advance_impl.hpp                           |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/begin_impl.hpp                             |     5 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/end_impl.hpp                               |     5 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/next_impl.hpp                              |    30 +++++++++------                         
   sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/prior_impl.hpp                             |    34 +++++++++++------                       
   sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/repetitive_view_iterator.hpp               |    23 +++---------                            
   sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/repetitive_view.hpp                               |    74 +++++++++++++++++++++++++++++++++++++-- 
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/distance_impl.hpp                             |     4 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp                     |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp                                     |     4 +                                       
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp                                 |    15 ++++++-                                 
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/deref_impl.hpp                                 |     4 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/end_impl.hpp                                   |    15 ++++++-                                 
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/equal_to_impl.hpp                              |    22 +++++++----                             
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/next_impl.hpp                                  |    15 ++++---                                 
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_fwd.hpp                            |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_iterator.hpp                       |    55 +++++++----------------------           
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/value_of_impl.hpp                              |     8 +---                                    
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp                                       |    42 ++++++++++++++++-----                   
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/transform_view_iterator.hpp                 |     4 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp                                 |     5 +-                                      
   50 files changed, 337 insertions(+), 317 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/tag_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/tag_of.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/tag_of.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -9,6 +9,7 @@
 
 #include <boost/fusion/support/tag_of.hpp>
 
+#include <boost/mpl/apply.hpp>
 #include <boost/mpl/iterator_tags.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/or.hpp>
@@ -41,7 +42,12 @@
             struct tag_of_fallback;
 
             template<typename T>
-            struct tag_of_fallback<T, typename enable_if<typename mpl::always<mpl::true_>::apply<T>::type>::type>
+            struct tag_of_fallback<
+                T
+              , typename enable_if<
+                    typename mpl::apply1<mpl::always<mpl::true_>,T>::type
+                >::type
+            >
             {
                 typedef typename detail::identity<T>::type identity_t;
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/category_of_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/category_of_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/category_of_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -36,7 +36,7 @@
             struct apply
             {
                 struct type
-                  : random_access_traversal_tag, associative_sequence_tag
+                  : random_access_traversal_tag, associative_tag
                 {};
             };
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -20,7 +20,7 @@
     struct assoc_struct_iterator_tag;
 
     struct assoc_struct_category
-      : bidirectional_traversal_tag, associative_sequence_tag
+      : bidirectional_traversal_tag, associative_tag
     {};
 
     namespace extension
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -68,7 +68,7 @@
                     is_convertible<T1_nonref, T2_nonref>
                   , is_convertible<T2_nonref, T1_nonref>
                 >::value
-            >::call(BOOST_FUSION_FORWARD(T1Ref,x),BOOST_FUSION_FORWARD(T2,y));
+            >::call(static_cast<T1Ref>(x),BOOST_FUSION_FORWARD(T2,y));
         }
 
         T1Ref x;
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -35,7 +35,7 @@
             typedef typename storage_type::type seq_type;
             typedef Pred pred_type;
 
-            typedef associative_sequence_tag category;
+            typedef associative_tag category;
             typedef filter_key_view_tag fusion_tag;
             typedef fusion_sequence_tag tag;
             typedef mpl::true_ is_view;
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -82,7 +82,7 @@
                         fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)),\
                         pos\
                     ),\
-                    BOOST_FUSION_FORWARD(Range RANGE_CV_REF_MODIFIER,range)\
+                    static_cast<Range RANGE_CV_REF_MODIFIER>(range)\
                 ),\
                 right_type(\
                     pos,\
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -46,8 +46,8 @@
             result_of::join<\
                 Seq1 SEQ1_CV_REF_MODIFIER\
               , Seq2 SEQ2_CV_REF_MODIFIER\
-            >::type(BOOST_FUSION_FORWARD(Seq1 SEQ1_CV_REF_MODIFIER,seq1)\
-                  , BOOST_FUSION_FORWARD(Seq2 SEQ2_CV_REF_MODIFIER,seq2));\
+            >::type(static_cast<Seq1 SEQ1_CV_REF_MODIFIER>(seq1)\
+                  , static_cast<Seq2 SEQ2_CV_REF_MODIFIER>(seq2));\
     }
 
     BOOST_FUSION_JOIN(
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -155,8 +155,8 @@
               , Seq2 SEQ2_CV_REF_MODIFIER\
               , BOOST_FUSION_RREF_ELSE_OBJ(F)\
               , IsAssociative\
-            >::type(BOOST_FUSION_FORWARD(Seq1 SEQ1_CV_REF_MODIFIER,seq1)\
-                  , BOOST_FUSION_FORWARD(Seq2 SEQ2_CV_REF_MODIFIER,seq2)\
+            >::type(static_cast<Seq1 SEQ1_CV_REF_MODIFIER>(seq1)\
+                  , static_cast<Seq2 SEQ2_CV_REF_MODIFIER>(seq2)\
                   , BOOST_FUSION_FORWARD(F,f));\
     }\
     \
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/detail/forward_ctor.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/forward_ctor.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
+++ (empty file)
@@ -1,25 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
-
-    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)
-==============================================================================*/
- 
-#if !defined(BOOST_FUSION_SEQ_NAME) && !defined(BOOST_FUSION_CONTAINER_DETAIL_FORWARD_CTOR_HPP)
-#   define BOOST_FUSION_CONTAINER_DETAIL_FORWARD_CTOR_HPP
-#   include <boost/config.hpp>
-#endif
-
-#ifdef BOOST_FUSION_USE_BASE_TYPE
-#   define BOOST_FUSION_INIT_BASE base_type
-#else
-#   define BOOST_FUSION_INIT_BASE data
-#endif
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/fusion/container/detail/pp/forward_ctor.hpp>
-#else
-#   include <boost/fusion/container/detail/variadic_templates/forward_ctor.hpp>
-#endif
-
-#undef BOOST_FUSION_INIT_BASE
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/forward_interface.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/forward_interface.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,68 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    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)
+==============================================================================*/
+ 
+#if !defined(BOOST_FUSION_SEQ_NAME) && !defined(BOOST_FUSION_CONTAINER_DETAIL_FORWARD_INTERFACE_HPP)
+#   define BOOST_FUSION_CONTAINER_DETAIL_FORWARD_INTERFACE_HPP
+#   include <boost/config.hpp>
+#endif
+
+#ifndef BOOST_FUSION_SEQ_NAME
+#   ifdef BOOST_NO_VARIADIC_TEMPLATES
+#       include <boost/fusion/container/detail/pp/forward_interface.hpp>
+#   else
+#       include <boost/fusion/container/detail/variadic_templates/forward_interface.hpp>
+#   endif
+#else
+
+#   ifdef BOOST_FUSION_USE_BASE_TYPE
+#       define BOOST_FUSION_SEQ_CTOR(COMBINATION,_)\
+        BOOST_FUSION_SEQ_NAME(BOOST_FUSION_SEQ_NAME COMBINATION seq)\
+          : base_type(static_cast<base_type COMBINATION>(seq))\
+        {}
+#   else
+#       define BOOST_FUSION_SEQ_CTOR(COMBINATION,_)\
+        BOOST_FUSION_SEQ_NAME(BOOST_FUSION_SEQ_NAME COMBINATION seq)\
+          : data(static_cast<BOOST_FUSION_SEQ_NAME COMBINATION>(seq).data)\
+        {}
+#   endif
+
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_SEQ_CTOR,_)
+
+#   undef BOOST_FUSION_SEQ_CTOR
+
+#   ifdef BOOST_FUSION_USE_BASE_TYPE
+#       define BOOST_FUSION_INIT_BASE base_type
+#   else
+#       define BOOST_FUSION_INIT_BASE data
+#   endif
+
+#   ifdef BOOST_NO_VARIADIC_TEMPLATES
+#       include <boost/fusion/container/detail/pp/forward_interface.hpp>
+#   else
+#       include <boost/fusion/container/detail/variadic_templates/forward_interface.hpp>
+#   endif
+
+        template<typename SeqAssign>
+        BOOST_FUSION_SEQ_NAME(BOOST_FUSION_R_ELSE_CLREF(SeqAssign) seq_assign)
+          : BOOST_FUSION_INIT_BASE(BOOST_FUSION_FORWARD(SeqAssign,seq_assign))
+        {}
+
+#   undef BOOST_FUSION_INIT_BASE
+
+        template <typename Seq>
+        BOOST_FUSION_SEQ_NAME&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+        {
+#   ifdef BOOST_FUSION_USE_BASE_TYPE
+            *static_cast<base_type*>(this) = BOOST_FUSION_FORWARD(Seq, seq);
+#   else
+            data = BOOST_FUSION_FORWARD(Seq, seq);
+#   endif
+            return *this;
+        }
+#endif
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -62,4 +62,5 @@
     };
 
 #undef BOOST_FUSION_N
+
 #endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
+++ (empty file)
@@ -1,46 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_PP_IS_ITERATING
-#   ifndef BOOST_FUSION_SEQ_NAME
-#       ifndef BOOST_FUSION_CONTAINER_DETAIL_PP_FORWARD_CTOR_HPP
-#           include <boost/fusion/support/internal/template.hpp>
-
-#           include <boost/config.hpp>
-#           include <boost/preprocessor/iterate.hpp>
-#           include <boost/preprocessor/repetition/enum_params.hpp>
-#           include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#       endif
-#   else
-#       define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/forward_ctor.hpp>
-#       define BOOST_PP_ITERATION_LIMITS (1, BOOST_FUSION_MAX_SEQ_SIZE)
-#       include BOOST_PP_ITERATE()
-
-    template<typename SeqAssign>
-    BOOST_FUSION_SEQ_NAME(SeqAssign const& seq_assign)
-      : BOOST_FUSION_INIT_BASE(seq_assign)
-    {}
-#   endif
-#else
-#   define BOOST_FUSION_N BOOST_PP_ITERATION()
-
-#   ifndef BOOST_NO_RVALUE_REFERENCES
-    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
-#   endif
-#   if BOOST_FUSION_N == 1
-    explicit
-#   endif
-#   ifdef BOOST_NO_RVALUE_REFERENCES
-    BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(BOOST_FUSION_N))
-#   else
-    BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_A(BOOST_FUSION_N))
-#   endif
-      : BOOST_FUSION_INIT_BASE(EXPAND_PARAMETERS_A(BOOST_FUSION_N))
-    {}
-
-#   undef BOOST_FUSION_N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_PP_IS_ITERATING
+#   ifndef BOOST_FUSION_SEQ_NAME
+#       ifndef BOOST_FUSION_CONTAINER_DETAIL_PP_FORWARD_INTERFACE_HPP
+#           define BOOST_FUSION_CONTAINER_DETAIL_PP_FORWARD_INTERFACE_HPP
+
+#           include <boost/fusion/support/internal/template.hpp>
+
+#           include <boost/config.hpp>
+#           include <boost/preprocessor/iterate.hpp>
+#           include <boost/preprocessor/repetition/enum_params.hpp>
+#           include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#       endif
+#   else
+#       define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/forward_interface.hpp>
+#       define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
+#       include BOOST_PP_ITERATE()
+#   endif
+#else
+#   define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+#   ifndef BOOST_NO_RVALUE_REFERENCES
+        VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+#   endif
+#   if BOOST_FUSION_N == 1
+        explicit
+#   endif
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+        BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(BOOST_FUSION_N))
+#   else
+        BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_A(BOOST_FUSION_N))
+#   endif
+          : BOOST_FUSION_INIT_BASE(EXPAND_PARAMETERS_A(BOOST_FUSION_N))
+        {}
+
+#   undef BOOST_FUSION_N
+#endif
Deleted: sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/forward_ctor.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/forward_ctor.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
+++ (empty file)
@@ -1,39 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
-
-    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_SEQ_NAME
-#   ifndef BOOST_FUSION_CONTAINER_DETAIL_VARIADIC_TEMPLATES_FORWARD_CTOR_HPP
-#   define BOOST_FUSION_CONTAINER_DETAIL_VARIADIC_TEMPLATES_FORWARD_CTOR_HPP
-#       ifdef BOOST_NO_RVALUE_REFERENCES
-#           include <boost/call_traits.hpp>
-#       endif
-#   endif
-#else
-#   ifdef BOOST_NO_RVALUE_REFERENCES
-    explicit
-    BOOST_FUSION_SEQ_NAME(
-        typename call_traits<Arguments>::param_type... arguments)
-      : BOOST_FUSION_INIT_BASE(arguments)
-    {}
-
-    template<typename T>
-    BOOST_FUSION_SEQ_NAME(T const& t)
-      : BOOST_FUSION_INIT_BASE(t)
-    {}
-#   else
-    template <typename... OtherArguments>
-    explicit
-    BOOST_FUSION_SEQ_NAME(OtherArguments&&... arguments)
-      : BOOST_FUSION_INIT_BASE(std::forward<OtherArguments>(arguments)...)
-    {}
-
-    template<typename T>
-    BOOST_FUSION_SEQ_NAME(T&& t)
-      : BOOST_FUSION_INIT_BASE(std::forward<T>(t))
-    {}
-#   endif
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/forward_interface.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/forward_interface.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,30 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    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_SEQ_NAME
+#   ifndef BOOST_FUSION_CONTAINER_DETAIL_VARIADIC_TEMPLATES_FORWARD_INTERFACE_HPP
+#       define BOOST_FUSION_CONTAINER_DETAIL_VARIADIC_TEMPLATES_FORWARD_INTERFACE_HPP
+
+#       ifdef BOOST_NO_RVALUE_REFERENCES
+#           include <boost/call_traits.hpp>
+#       endif
+#   endif
+#else
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+        explicit
+        BOOST_FUSION_SEQ_NAME(
+            typename call_traits<Arguments>::param_type... arguments)
+          : BOOST_FUSION_INIT_BASE(arguments)
+        {}
+#   else
+        template <typename... OtherArguments>
+        explicit
+        BOOST_FUSION_SEQ_NAME(OtherArguments&&... arguments)
+          : BOOST_FUSION_INIT_BASE(std::forward<OtherArguments>(arguments)...)
+        {}
+#   endif
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -72,4 +72,5 @@
     }
 
 #undef BOOST_FUSION_N
+
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -35,18 +35,16 @@
 #include <boost/type_traits/is_convertible.hpp>
 #include <boost/utility/enable_if.hpp>
 
-#include <boost/fusion/container/list/detail/cons/cons_fwd.hpp>
-#include <boost/fusion/container/list/detail/cons/value_at_impl.hpp>
-#include <boost/fusion/container/list/detail/cons/at_impl.hpp>
-#include <boost/fusion/container/list/detail/cons/empty_impl.hpp>
-
-#include <boost/fusion/container/list/detail/cons/cons_iterator.hpp>
-#include <boost/fusion/container/list/detail/cons/begin_impl.hpp>
-#include <boost/fusion/container/list/detail/cons/end_impl.hpp>
-#include <boost/fusion/container/list/detail/cons/deref_impl.hpp>
-#include <boost/fusion/container/list/detail/cons/next_impl.hpp>
-#include <boost/fusion/container/list/detail/cons/value_of_impl.hpp>
-#include <boost/fusion/container/list/detail/cons/equal_to_impl.hpp>
+#include <boost/fusion/container/list/detail/cons_fwd.hpp>
+#include <boost/fusion/container/list/detail/cons_iterator.hpp>
+#include <boost/fusion/container/list/detail/value_at_impl.hpp>
+#include <boost/fusion/container/list/detail/at_impl.hpp>
+#include <boost/fusion/container/list/detail/begin_impl.hpp>
+#include <boost/fusion/container/list/detail/end_impl.hpp>
+#include <boost/fusion/container/list/detail/deref_impl.hpp>
+#include <boost/fusion/container/list/detail/next_impl.hpp>
+#include <boost/fusion/container/list/detail/value_of_impl.hpp>
+#include <boost/fusion/container/list/detail/equal_to_impl.hpp>
 
 namespace boost { namespace fusion
 {
@@ -125,10 +123,10 @@
         //of cons_.car/cons_.cdr explicitly
 #define BOOST_FUSION_CONS_CTOR(COMBINATION,_)\
         cons(cons COMBINATION cons_)\
-          : car(fusion::front(BOOST_FUSION_FORWARD(cons COMBINATION,cons_)))\
+          : car(fusion::front(static_cast<cons COMBINATION>(cons_)))\
           , cdr(detail::assign_by_deref(),\
                 fusion::next(fusion::begin(\
-                        BOOST_FUSION_FORWARD(cons COMBINATION,cons_))))\
+                    static_cast<cons COMBINATION>(cons_))))\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_CONS_CTOR,_);
@@ -226,14 +224,13 @@
             return *this;
         }
 
-        template<typename Seq>
         cons&
-        operator=(cons const& seq)
+        operator=(cons const& cons_)
         {
 #ifdef BOOST_NO_RVALUE_REFERENCES
-            return this->operator=<cons<Car,Cdr> >(seq);
+            return this->operator=<cons<Car,Cdr> >(cons_);
 #else
-            return this->operator=<cons<Car,Cdr> const&>(seq);
+            return this->operator=<cons<Car,Cdr> const&>(cons_);
 #endif
         }
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/convert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/convert.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/convert.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -18,6 +18,6 @@
 #undef BOOST_FUSION_MAX_SEQ_SIZE
 #undef BOOST_FUSION_SEQ_NAME
 
-#include <boost/fusion/container/list/detail/cons/convert_impl.hpp>
+#include <boost/fusion/container/list/detail/convert_impl.hpp>
 
 #endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/at_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,62 @@
+/*=============================================================================
+    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_CONTAINER_LIST_DETAIL_AT_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_AT_IMPL_HPP
+
+#include <boost/config.hpp>
+#include <boost/fusion/support/internal/workaround.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct at_impl;
+
+    template <>
+    struct at_impl<cons_tag>
+    {
+        template <typename Seq, typename N>
+        struct apply
+        {
+            typedef typename
+                detail::forward_as<
+                    Seq
+                  , typename value_at_impl<cons_tag>::
+                        template apply<Seq, N>::type
+                >::type
+            type;
+
+            template <typename Cons, int N2>
+            static type
+            call(Cons& cons, mpl::int_<N2>)
+            {
+                return call(cons.cdr, mpl::int_<N2-1>());
+            }
+
+            template <typename Cons>
+            static type
+            call(Cons& cons, mpl::int_<0>)
+            {
+                return cons.car;
+            }
+
+            static type
+            call(Seq seq)
+            {
+                return call(seq, mpl::int_<N::value>());
+            }
+        };
+    };
+
+    template <>
+    struct at_impl<list_tag>
+      : at_impl<cons_tag>
+    {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/begin_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/begin_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_BEGIN_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_BEGIN_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct begin_impl;
+
+    template <>
+    struct begin_impl<cons_tag>
+    {
+        template <typename Seq>
+        struct apply
+        {
+            typedef cons_iterator<typename detail::add_lref<Seq>::type> type;
+
+            static type
+            call(Seq t)
+            {
+                return type(t,0);
+            }
+        };
+    };
+
+    template <>
+    struct begin_impl<list_tag>
+      : begin_impl<cons_tag>
+    {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/build_cons.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/build_cons.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,61 @@
+/*=============================================================================
+    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_CONTAINER_LIST_DETAIL_BUILD_CONS_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_BUILD_CONS_HPP
+
+#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template <
+        typename Begin
+      , typename End
+      , bool is_empty = result_of::equal_to<Begin, End>::value>
+    struct build_cons;
+
+    template <typename Begin, typename End>
+    struct build_cons<Begin, End, true>
+    {
+        typedef nil type;
+
+        static nil
+        call(Begin const&, End const&)
+        {
+            return nil();
+        }
+    };
+
+    template <typename Begin, typename End>
+    struct build_cons<Begin, End, false>
+    {
+        typedef
+            build_cons<typename result_of::next<Begin>::type, End>
+        next_build_cons;
+
+        typedef
+            cons<
+                typename result_of::value_of<Begin>::type
+              , typename next_build_cons::type
+            >
+        type;
+
+        static type
+        call(Begin const& f, End const& l)
+        {
+            return type(
+                    fusion::deref(f),
+                    next_build_cons::call(fusion::next(f), l));
+        }
+    };
+
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_fwd.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,21 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_FWD_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_FWD_HPP
+
+namespace boost { namespace fusion
+{
+    struct list_tag;
+    struct cons_tag;
+    struct nil;
+
+    template <typename Car, typename Cdr>
+    struct cons;
+}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_gen.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,17 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_GEN_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_GEN_HPP
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/container/list/detail/pp/cons_gen.hpp>
+#else
+#   include <boost/fusion/container/list/detail/variadic_templates/cons_gen.hpp>
+#endif
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_iterator.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,93 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_ITERATOR_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_ITERATOR_HPP
+
+#include <boost/fusion/container/list/list_fwd.hpp>
+#include <boost/fusion/support/iterator_base.hpp>
+
+namespace boost { namespace fusion
+{
+    struct cons_iterator_tag;
+    struct forward_traversal_tag;
+
+    template<typename ConsRef>
+    struct cons_iterator
+      : iterator_base<cons_iterator<ConsRef> >
+    {
+        typedef cons_iterator_tag fusion_tag;
+        typedef forward_traversal_tag category;
+        typedef ConsRef cons_type;
+
+        template<typename OtherConsRef>
+        cons_iterator(cons_iterator<OtherConsRef> const& it)
+          : cons(it.cons)
+        {}
+
+        cons_iterator(cons_type cons, int)
+          : cons(&cons)
+        {}
+
+        template<typename OtherConsRef>
+        cons_iterator&
+        operator=(cons_iterator<OtherConsRef> const& other_it)
+        {
+            cons=other_it.cons;
+            return *this;
+        }
+
+        typename detail::remove_reference<cons_type>::type* cons;
+    };
+
+    struct nil_iterator
+      : iterator_base<nil_iterator>
+    {
+        typedef forward_traversal_tag category;
+        typedef cons_iterator_tag fusion_tag;
+        typedef nil cons_type;
+
+        nil_iterator()
+        {}
+
+        nil_iterator(nil const&,int)
+        {}
+    };
+
+#define BOOST_FUSION_NIL_ITERATOR(COMBINATION,_)\
+      template <>\
+      struct cons_iterator<nil COMBINATION>\
+        : nil_iterator\
+      {\
+          cons_iterator()\
+          {}\
+          \
+          explicit\
+          cons_iterator(nil COMBINATION, int)\
+          {}\
+      };\
+      \
+      template <>\
+      struct cons_iterator<list<> COMBINATION>\
+        : nil_iterator\
+      {\
+          cons_iterator()\
+          {}\
+          \
+          explicit\
+          cons_iterator(nil COMBINATION, int)\
+          {}\
+      };
+
+    BOOST_FUSION_ALL_CV_REF_COMBINATIONS(BOOST_FUSION_NIL_ITERATOR,_)
+
+#undef BOOST_FUSION_NIL_ITERATOR
+}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/convert_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/convert_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_CONVERT_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_CONVERT_IMPL_HPP
+
+#include <boost/fusion/container/list/detail/build_cons.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename T>
+    struct convert_impl;
+
+    template <>
+    struct convert_impl<cons_tag>
+    {
+        template <typename Seq>
+        struct apply
+        {
+            typedef
+                detail::build_cons<
+                    typename result_of::begin<Seq>::type
+                  , typename result_of::end<Seq>::type
+                >
+            build_cons;
+
+            typedef typename build_cons::type type;
+
+            static type
+            call(Seq seq)
+            {
+                return build_cons::call(
+                        fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)),
+                        fusion::end(BOOST_FUSION_FORWARD(Seq,seq)));
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/deref_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/deref_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_DEREF_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_DEREF_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct deref_impl;
+
+    template <>
+    struct deref_impl<cons_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename
+                detail::remove_reference<It>::type::cons_type
+            cons_type;
+            typedef typename
+                detail::remove_reference<cons_type>::type::car_type
+            car_type;
+
+            typedef typename
+                detail::forward_as<cons_type,car_type>::type
+            type;
+
+            static type
+            call(It it)
+            {
+                return it.cons->car;
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/end_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/end_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_END_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_END_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct end_impl;
+
+    template <>
+    struct end_impl<cons_tag>
+    {
+        template <typename Seq>
+        struct apply
+        {
+            typedef
+                cons_iterator<typename detail::forward_as<Seq,nil>::type>
+            type;
+
+            static type
+            call(Seq)
+            {
+                return type();
+            }
+        };
+    };
+
+    template <>
+    struct end_impl<list_tag>
+      : end_impl<cons_tag>
+    {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/equal_to_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/equal_to_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,33 @@
+/*=============================================================================
+    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_CONTAINER_LIST_DETAIL_EQUAL_TO_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_EQUAL_TO_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct equal_to_impl;
+
+    template <>
+    struct equal_to_impl<cons_iterator_tag>
+    {
+        template <typename It1, typename It2>
+        struct apply
+          : is_same<
+                typename detail::identity<
+                    typename detail::remove_reference<It1>::type::cons_type
+                >::type
+              , typename detail::identity<
+                    typename detail::remove_reference<It2>::type::cons_type
+                >::type
+            >
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/next_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/next_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,46 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_NEXT_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_NEXT_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct next_impl;
+
+    template <>
+    struct next_impl<cons_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename
+                detail::remove_reference<It>::type::cons_type
+            cons_type;
+            typedef typename
+                detail::remove_reference<cons_type>::type::cdr_type
+            cdr_type;
+
+            typedef
+                cons_iterator<
+                    typename detail::forward_as<cons_type, cdr_type>::type
+                >
+            type;
+
+            static type
+            call(It it)
+            {
+                return type(it.cons->cdr,0);
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,54 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_PP_IS_ITERATING
+
+#   ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_PP_CONS_GEN_HPP
+#   define BOOST_FUSION_CONTAINER_LIST_DETAIL_PP_CONS_GEN_HPP
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_LIST_SIZE)
+    struct cons_gen;
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/list/detail/pp/cons_gen.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_LIST_SIZE)
+#include BOOST_PP_ITERATE()
+}}}
+
+#   endif
+
+#else
+
+#   define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    VARIADIC_TEMPLATE(BOOST_FUSION_N)
+    struct cons_gen
+        EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+            FUSION_MAX_LIST_SIZE,BOOST_FUSION_N)
+    {
+    public:
+#   if BOOST_FUSION_N
+        typedef
+            cons<
+                T0
+              , typename cons_gen<
+                    BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_FUSION_N, T)
+                >::type
+            >
+        type;
+#   else
+        typedef nil type;
+#   endif
+    };
+
+#   undef BOOST_FUSION_N
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,46 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_PP_IS_ITERATING
+#   define BOOST_PP_FILENAME_1 <boost/fusion/container/list/detail/pp/list_forward_ctor.hpp>
+#   define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_LIST_SIZE)
+#   include BOOST_PP_ITERATE()
+#else
+#   define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+#   ifndef BOOST_NO_RVALUE_REFERENCES
+    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+#   endif
+#   if BOOST_FUSION_N == 1
+    explicit
+#   endif
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+    list(EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(BOOST_FUSION_N))
+#   else
+    list(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
+#   endif
+#   if BOOST_FUSION_N
+#       if BOOST_FUSION_N <= 1
+      : base_type(EXPAND_PARAMETERS_A(BOOST_FUSION_N))
+#       else
+#           ifdef BOOST_NO_RVALUE_REFERENCES
+      : base_type(vector<
+                      BOOST_PP_ENUM_BINARY_PARAMS(BOOST_FUSION_N,
+                              typename call_traits<T,
+                              >::param_type BOOST_PP_INTERCEPT)
+                  >(EXPAND_PARAMETERS_A(BOOST_FUSION_N)))
+#           else
+      : base_type(vector<
+                      BOOST_PP_ENUM_BINARY_PARAMS(N, A,&& BOOST_PP_INTERCEPT)
+                  >(EXPAND_PARAMETERS_A(BOOST_FUSION_N)))
+#           endif
+#       endif
+#   endif
+    {}
+
+#   undef BOOST_FUSION_N
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/value_at_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,44 @@
+/*=============================================================================
+    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_CONTAINER_LIST_DETAIL_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_VALUE_AT_IMPL_HPP
+
+#include <boost/mpl/eval_if.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct value_at_impl;
+
+    template <>
+    struct value_at_impl<cons_tag>
+    {
+        template <typename Seq, typename N>
+        struct apply
+        {
+            typedef typename
+                detail::remove_reference<Seq>::type
+            seq;
+
+            typedef typename
+                mpl::eval_if<
+                    N
+                  , apply<typename seq::cdr_type, mpl::int_<N::value-1> >
+                  , mpl::identity<typename seq::car_type>
+                >::type
+            type;
+        };
+    };
+
+    template <>
+    struct value_at_impl<list_tag>
+      : value_at_impl<cons_tag>
+    {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/value_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/value_of_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2005 Joel de Guzman
+    Copyright (c) 2005 Eric Niebler
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_VALUE_OF_IMPL_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_VALUE_OF_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct value_of_impl;
+
+    template <>
+    struct value_of_impl<cons_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename
+                detail::remove_reference<
+                    typename detail::remove_reference<It>::type::cons_type
+                >::type::car_type
+            type;
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/variadic_templates/cons_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/variadic_templates/cons_gen.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_VARIADIC_TEMPLATES_CONS_GEN_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_VARIADIC_TEMPLATES_CONS_GEN_HPP
+
+namespace boost { namespace fusion { namespace detail
+{
+    template<typename... Args>
+    struct cons_gen;
+
+    template<typename Head, typename... Args>
+    struct cons_gen<Head, Args...>
+    {
+    public:
+        typedef cons<Head, typename cons_gen<Args...>::type> type;
+    };
+
+    template<>
+    struct cons_gen<>
+    {
+    public:
+        typedef nil type;
+    };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -10,68 +10,59 @@
 #define BOOST_FUSION_CONTAINER_LIST_LIST_HPP
 
 #include <boost/fusion/container/list/list_fwd.hpp>
-#include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/support/internal/ref.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>
-#include <boost/fusion/container/list/detail/list/value_at_impl.hpp>
-#include <boost/fusion/container/list/detail/list/deref_impl.hpp>
-#include <boost/fusion/container/list/detail/list/value_of_impl.hpp>
-
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/list/cons.hpp>
+#include <boost/fusion/container/generation/vector_tie.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
+#include <boost/fusion/container/list/detail/cons_gen.hpp>
 
 namespace boost { namespace fusion
 {
-    struct fusion_sequence_tag;
-
     VARIADIC_TEMPLATE(FUSION_MAX_LIST_SIZE)
     struct list
-      : sequence_base<list<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_LIST_SIZE)> >
+      : detail::cons_gen<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_LIST_SIZE)>::type
     {
-        typedef bidirectional_traversal_tag category;
-        typedef list_tag fusion_tag;
-        typedef fusion_sequence_tag tag;
-        typedef mpl::false_ is_view;
-
         typedef
-            vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_LIST_SIZE)>
-        storage_type;
-        typedef typename storage_type::size size;
+            detail::cons_gen<
+                EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_LIST_SIZE)
+            >
+        cons_gen;
+        typedef typename cons_gen::type base_type;
 
-        list()
-        {}
+        typedef list_tag fusion_tag;
 
-#define BOOST_FUSION_LIST_CTOR(COMBINATION,_)\
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   define BOOST_FUSION_LIST_CTOR(COMBINATION,_)\
         list(list COMBINATION list_)\
-          : data(BOOST_FUSION_FORWARD(list COMBINATION,list_).data)\
+          : base_type(static_cast<base_type COMBINATION>(list_))\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_LIST_CTOR,_)
 
-#undef BOOST_FUSION_LIST_CTOR
+#   undef BOOST_FUSION_LIST_CTOR
 
-#define BOOST_FUSION_SEQ_NAME list
-#define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_LIST_SIZE
-#include <boost/fusion/container/detail/forward_ctor.hpp>
-#undef BOOST_FUSION_MAX_SEQ_SIZE
-#undef BOOST_FUSION_SEQ_NAME
+#   include <boost/fusion/container/list/detail/pp/list_forward_ctor.hpp>
+
+        template<typename SeqAssign>
+        list(SeqAssign const& seq_assign)
+          : base_type(seq_assign)
+        {}
 
         template <typename Seq>
         list&
         operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
         {
-            data = BOOST_FUSION_FORWARD(Seq, seq);
+            *static_cast<base_type*>(this) = BOOST_FUSION_FORWARD(Seq, seq);
             return *this;
         }
-
-        storage_type& get_data() { return data; }
-        storage_type const& get_data() const { return data; }
-
-    private:
-        storage_type data;
+#else
+#   define BOOST_FUSION_USE_BASE_TYPE
+#   define BOOST_FUSION_SEQ_NAME list
+#   define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_LIST_SIZE
+#   include <boost/fusion/container/detail/forward_interface.hpp>
+#   undef BOOST_FUSION_MAX_SEQ_SIZE
+#   undef BOOST_FUSION_SEQ_NAME
+#   undef BOOST_FUSION_USE_BASE_TYPE
+#endif
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -14,10 +14,6 @@
 
 namespace boost { namespace fusion
 {
-    struct list_tag;
-    struct list_iterator_tag;
-    struct bidirectional_traversal_tag;
-
     VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_LIST_SIZE)
     struct list;
 }}
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -25,7 +25,7 @@
 #include <boost/fusion/container/map/detail/deref_data_impl.hpp>
 #include <boost/fusion/container/map/detail/key_of_impl.hpp>
 
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
 
 namespace boost { namespace fusion
 {
@@ -45,32 +45,12 @@
         storage_type;
         typedef typename storage_type::size size;
 
-        map()
-        {}
-
-#define BOOST_FUSION_MAP_CTOR(COMBINATION,_)\
-        map(map COMBINATION map_)\
-          : data(BOOST_FUSION_FORWARD(map COMBINATION,map_).data)\
-        {}
-
-        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_MAP_CTOR,_)
-
-#undef BOOST_FUSION_MAP_CTOR
-
 #define BOOST_FUSION_SEQ_NAME map
 #define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_MAP_SIZE
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
 #undef BOOST_FUSION_MAX_SEQ_SIZE
 #undef BOOST_FUSION_SEQ_NAME
 
-        template <typename Seq>
-        map&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-        {
-            data = BOOST_FUSION_FORWARD(Seq, seq);
-            return *this;
-        }
-
         storage_type& get_data() { return data; }
         storage_type const& get_data() const { return data; }
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -19,7 +19,7 @@
     struct map_iterator_tag;
 
     struct map_category
-      : bidirectional_traversal_tag, associative_sequence_tag
+      : bidirectional_traversal_tag, associative_tag
     {};
 
     VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_MAP_SIZE)
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -24,7 +24,7 @@
 #include <boost/fusion/container/set/detail/deref_data_impl.hpp>
 #include <boost/fusion/container/set/detail/key_of_impl.hpp>
 
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
 
 namespace boost { namespace fusion
 {
@@ -44,32 +44,12 @@
         storage_type;
         typedef typename storage_type::size size;
 
-        set()
-        {}
-
-#define BOOST_FUSION_SET_CTOR(COMBINATION,_)\
-        set(set COMBINATION set_)\
-          : data(BOOST_FUSION_FORWARD(set COMBINATION,set_).data)\
-        {}
-
-        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_SET_CTOR,_)
-
-#undef BOOST_FUSION_SET_CTOR
-
 #define BOOST_FUSION_SEQ_NAME set
 #define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_SET_SIZE
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
 #undef BOOST_FUSION_MAX_SEQ_SIZE
 #undef BOOST_FUSION_SEQ_NAME
 
-        template <typename Seq>
-        set&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-        {
-            data = BOOST_FUSION_FORWARD(Seq, seq);
-            return *this;
-        }
-
         storage_type& get_data() { return data; }
         storage_type const& get_data() const { return data; }
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -19,7 +19,7 @@
     struct set_iterator_tag;
 
     struct set_category
-      : bidirectional_traversal_tag, associative_sequence_tag
+      : bidirectional_traversal_tag, associative_tag
     {};
 
     VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_SET_SIZE)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -16,7 +16,7 @@
 #include <boost/mpl/bool.hpp>
 #include <boost/type_traits/add_const.hpp>
 
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
 
 namespace boost { namespace fusion
 {
@@ -36,35 +36,13 @@
         base_type;
 
     public:
-        vector()
-        {}
-
-#define BOOST_FUSION_VECTOR_CTOR(COMBINATION,_)\
-        vector(\
-            vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_VECTOR_SIZE)>\
-                COMBINATION vec)\
-          : base_type(BOOST_FUSION_FORWARD(base_type COMBINATION,vec))\
-        {}
-
-        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_VECTOR_CTOR,_);
-
-#undef BOOST_FUSION_VECTOR_CTOR
-
 #define BOOST_FUSION_USE_BASE_TYPE
 #define BOOST_FUSION_SEQ_NAME vector
 #define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
 #undef BOOST_FUSION_MAX_SEQ_SIZE
 #undef BOOST_FUSION_SEQ_NAME
 #undef BOOST_FUSION_USE_BASE_TYPE
-
-        template <typename Seq>
-        vector&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-        {
-            *static_cast<base_type*>(this)=BOOST_FUSION_FORWARD(Seq,seq);
-            return *this;
-        }
     };
 }}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -187,7 +187,7 @@
         BOOST_PP_CAT(vector,BOOST_FUSION_N)(Seq COMBINATION seq)\
           : BOOST_PP_ENUM(BOOST_FUSION_N,\
                   BOOST_FUSION_MEMBER_INIT,\
-                  BOOST_FUSION_FORWARD(Seq COMBINATION,seq))\
+                  static_cast<Seq COMBINATION>(seq))\
         {\
             BOOST_FUSION_MPL_ASSERT((\
                     mpl::equal_to<size,result_of::size<Seq> >));\
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -288,7 +288,7 @@
 #define VECTOR_CTOR(COMBINATION,_)\
         vector(vector COMBINATION vec)\
           : base_type(detail::assign_by_deref(),\
-                fusion::begin(BOOST_FUSION_FORWARD(vector COMBINATION,vec)))\
+                fusion::begin(static_cast<vector COMBINATION>(vec)))\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(VECTOR_CTOR,_)
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/ext_/size_s.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/ext_/size_s.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/ext_/size_s.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -31,7 +31,9 @@
             template<typename This, typename State, typename Seq>
             struct result<This(State, Seq)>
               : mpl::plus<
-                    segmented_size<typename remove_reference<Seq>::type>
+                    segmented_size<
+                        typename remove_reference<Seq>::type
+                    >
                   , typename remove_reference<State>::type
                 >
             {};
@@ -41,10 +43,12 @@
     ///////////////////////////////////////////////////////////////////////////
     template<typename Sequence, bool IsSegmented>
     struct segmented_size
-      : result_of::fold<
-            typename result_of::segments<Sequence>::type
-          , mpl::size_t<0>
-          , detail::size_plus
+      : detail::remove_reference<
+            typename result_of::fold<
+                typename result_of::segments<Sequence>::type
+              , mpl::size_t<0>
+              , detail::size_plus
+            >::type
         >::type
     {};
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -82,7 +82,7 @@
         }
     };
 
-    struct associative_sequence_tag
+    struct associative_tag
     {};
 
     namespace extension
@@ -118,7 +118,7 @@
         template <typename T>
         struct is_associative
           : is_base_of<
-                associative_sequence_tag
+                associative_tag
               , typename category_of<T>::type
             >
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -27,8 +27,9 @@
     template<typename...>
     struct variadic_arguments_to_vector;
 
-#define BOOST_PP_ITERATION_PARAMS_1\
-    (3, (0, 50, <boost/fusion/support/internal/variadic_templates/detail/variadic_arguments_to_vector_n.hpp>))
+#define BOOST_PP_FILENAME_1\
+    <boost/fusion/support/internal/variadic_templates/detail/variadic_arguments_to_vector_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, 50)
 #include BOOST_PP_ITERATE()
 }}}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector_c.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector_c.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector_c.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -27,8 +27,9 @@
     template<int...>
     struct variadic_arguments_to_vector_c;
 
-#define BOOST_PP_ITERATION_PARAMS_1\
-    (3, (0, 50, <boost/fusion/support/internal/variadic_templates/detail/variadic_arguments_to_vector_c_n.hpp>))
+#define BOOST_PP_FILENAME_1\
+    <boost/fusion/support/internal/variadic_templates/detail/variadic_arguments_to_vector_c_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, 50)
 #include BOOST_PP_ITERATE()
 }}}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -20,7 +20,7 @@
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/internal/workaround.hpp>
 
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
 
 namespace boost { namespace fusion
 {
@@ -32,14 +32,7 @@
             vector<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_VECTOR_SIZE)>
         base_type;
 
-        tuple()
-        {}
-
 #define TUPLE_CTOR(COMBINATION,_)\
-        tuple(tuple COMBINATION tuple)\
-          : base_type(static_cast<base_type COMBINATION>(tuple))\
-        {}\
-        \
         template <typename A1, typename A2>\
         tuple(std::pair<A1, A2> COMBINATION pair)\
           : base_type(static_cast<std::pair<A1, A2> COMBINATION>(pair))\
@@ -52,18 +45,10 @@
 #define BOOST_FUSION_USE_BASE_TYPE
 #define BOOST_FUSION_SEQ_NAME tuple
 #define BOOST_FUSION_MAX_SEQ_SIZE FUSION_MAX_VECTOR_SIZE
-#include <boost/fusion/container/detail/forward_ctor.hpp>
+#include <boost/fusion/container/detail/forward_interface.hpp>
 #undef BOOST_FUSION_MAX_SEQ_SIZE
 #undef BOOST_FUSION_SEQ_NAME
 #undef BOOST_FUSION_USE_BASE_TYPE
-
-        template <typename Seq>
-        tuple&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-        {
-            *static_cast<base_type*>(this) = BOOST_FUSION_FORWARD(Seq, seq);
-            return *this;
-        }
     };
 
     template <typename Tuple>
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -21,11 +21,13 @@
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/inherit.hpp>
 #include <boost/mpl/identity.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+#   include <boost/type_traits/is_same.hpp>
+#endif
 
 #include <boost/fusion/view/filter_view/detail/filter_view_fwd.hpp>
-#include <boost/fusion/view/filter_view/detail/size_impl.hpp>
-
 #include <boost/fusion/view/filter_view/detail/filter_view_iterator.hpp>
+#include <boost/fusion/view/filter_view/detail/size_impl.hpp>
 #include <boost/fusion/view/filter_view/detail/begin_impl.hpp>
 #include <boost/fusion/view/filter_view/detail/end_impl.hpp>
 #include <boost/fusion/view/filter_view/detail/deref_impl.hpp>
@@ -54,7 +56,7 @@
         typedef typename
             mpl::eval_if<
                 traits::is_associative<seq_type>
-              , mpl::inherit2<forward_traversal_tag,associative_sequence_tag>
+              , mpl::inherit2<forward_traversal_tag,associative_tag>
               , mpl::identity<forward_traversal_tag>
             >::type
         category;
@@ -90,6 +92,10 @@
         operator=(BOOST_FUSION_R_ELSE_CLREF(OtherView) other_view)
         {
             BOOST_FUSION_TAG_CHECK(OtherView,filter_view_tag);
+            BOOST_FUSION_MPL_ASSERT((is_same<
+                    pred_type
+                  , detail::remove_reference<OtherView>::type::pred_type
+                >));
 
             seq=BOOST_FUSION_FORWARD(OtherView,other_view).seq;
             return *this;
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -62,7 +62,7 @@
                     traits::is_associative<seq1_type>
                   , traits::is_associative<seq2_type>
                 >
-              , mpl::inherit2<forward_traversal_tag,associative_sequence_tag>
+              , mpl::inherit2<forward_traversal_tag,associative_tag>
               , mpl::identity<forward_traversal_tag>
             >::type
         category;
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -162,8 +162,9 @@
         struct as_nview;
     }
 
-#   define BOOST_PP_ITERATION_PARAMS_1\
-    (3, (0, FUSION_MAX_VECTOR_SIZE, <boost/fusion/view/nview/detail/pp/as_nview.hpp>))
+#   define BOOST_PP_FILENAME_1\
+        <boost/fusion/view/nview/detail/pp/as_nview.hpp>
+#   define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_VECTOR_SIZE)
     #include BOOST_PP_ITERATE()
 #endif
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/advance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/advance_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/advance_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -67,7 +67,7 @@
             static type
             call(It const& it)
             {
-                return fusion::advance<real_n>(fusion::begin(it.seq.get()));
+                return fusion::advance<real_n>(fusion::begin(*it.seq));
             }
         };
     }
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/begin_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -26,7 +26,10 @@
 
             typedef
                 repetitive_view_iterator<
-                    typename seq::seq_type
+                    typename detail::forward_as<
+                        Seq
+                      , typename seq::seq_type
+                    >::type
                   , typename result_of::begin<typename seq::seq_type>::type
                   , 0
                 >
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/end_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -91,7 +91,10 @@
 
                 typedef
                     repetitive_view_iterator<
-                        typename seq::seq_type
+                        typename detail::forward_as<
+                            Seq
+                          , typename seq::seq_type
+                        >::type
                       , typename gen::type
                       , seq::size::value
                     >
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/next_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -9,13 +9,16 @@
 #ifndef BOOST_FUSION_VIEW_REPETITIVE_VIEW_DETAIL_NEXT_IMPL_HPP
 #define BOOST_FUSION_VIEW_REPETITIVE_VIEW_DETAIL_NEXT_IMPL_HPP
 
-#include <boost/fusion/sequence/intrinsic/size.hpp>
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
 
+#include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/next.hpp>
 #include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/identity.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -26,41 +29,44 @@
         struct apply
         {
             typedef typename detail::remove_reference<It>::type it;
+            typedef typename
+                result_of::next<typename it::it_type>::type
+            next_it;
             typedef
-                mpl::equal_to<
-                    typename mpl::next<typename it::index>::type
-                  , result_of::size<typename it::seq_type>
+                result_of::equal_to<
+                    next_it
+                  , typename result_of::end<typename it::seq_type>::type
                 >
-            need_begin_it;
+            new_iterator;
 
             typedef
                 repetitive_view_iterator<
                     typename it::seq_type
                   , typename mpl::eval_if<
-                        need_begin_it
+                        new_iterator
                       , result_of::begin<typename it::seq_type>
-                      , result_of::next<typename it::it_type>
+                      , mpl::identity<next_it>
                     >::type
                   , mpl::next<typename it::index>::type::value
                 >
             type;
 
             static type
-            call_impl(It it, mpl::true_ /*need_begin_it*/)
+            call_impl(It it, mpl::false_ /*new_iterator*/)
             {
-                return type(it.seq.get(),fusion::begin(it.seq.seq.get()));
+                return type(*it.seq,fusion::next(it.it));
             }
 
             static type
-            call_impl(It it, mpl::false_ /*need_begin_it*/)
+            call_impl(It it, mpl::true_ /*new_iterator*/)
             {
-                return type(it.seq.get(),fusion::next(it.it));
+                return type(*it.seq,begin(*it.seq));
             }
 
             static type
             call(It it)
             {
-                return call_impl(it,typename need_begin_it::type());
+                return call_impl(it,new_iterator());
             }
         };
     };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/prior_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/prior_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/prior_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -8,11 +8,12 @@
 #ifndef BOOST_FUSION_VIEW_REPETITIVE_VIEW_DETAIL_PRIOR_IMPL_HPP
 #define BOOST_FUSION_VIEW_REPETITIVE_VIEW_DETAIL_PRIOR_IMPL_HPP
 
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
 
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
 #include <boost/mpl/next.hpp>
 #include <boost/mpl/equal_to.hpp>
 
@@ -25,15 +26,24 @@
         struct apply
         {
             typedef typename detail::remove_reference<It>::type it;
+            typedef typename
+                result_of::end<typename it::seq_type>::type
+            seq_end;
+            typedef
+                result_of::equal_to<
+                    typename it::it_type
+                  , typename result_of::begin<typename it::seq_type>::type
+                >
+            new_iterator;
 
             typedef
                 repetitive_view_iterator<
                     typename it::seq_type
                   , typename result_of::prior<
-                        typename mpl::eval_if<
-                            typename it::index
-                          , mpl::identity<typename it::it_type>
-                          , result_of::end<typename it::seq_type>
+                        typename mpl::if_<
+                            new_iterator
+                          , seq_end
+                          , typename it::it_type
                         >::type
                     >::type
                   , mpl::next<typename it::index>::type::value
@@ -41,22 +51,22 @@
             type;
 
             static type
-            call_impl(It it, mpl::false_ /*need_end_it*/)
+            call_impl(It it, mpl::false_ /*new_iterator*/)
             {
-                return type(it.seq.get(),
-                        fusion::prior(fusion::end(it.seq.get())));
+                return type(it.seq.get(),fusion::prior(it.it));
             }
 
             static type
-            call_impl(It it, mpl::true_ /*need_end_it*/)
+            call_impl(It it, mpl::true_ /*new_iterator*/)
             {
-                return type(it.seq.get(),fusion::prior(it.it));
+                return type(it.seq.get(),
+                            fusion::prior(fusion::end(*it.seq)));
             }
 
             static type
             call(It it)
             {
-                return call_impl(it,mpl::bool_<it::index::value>());
+                return call_impl(it,new_iterator());
             }
         };
     };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/repetitive_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/repetitive_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/repetitive_view_iterator.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -19,15 +19,11 @@
 {
     struct repetitive_view_iterator_tag;
 
-    template<
-        typename Seq
-      , typename It
-      , int Index
-    >
+    template<typename SeqRef, typename It, int Index>
     struct repetitive_view_iterator
-      : iterator_base<repetitive_view_iterator<Seq, It, Index> >
+      : iterator_base<repetitive_view_iterator<SeqRef, It, Index> >
     {
-        typedef Seq seq_type;
+        typedef SeqRef seq_type;
         typedef It it_type;
         typedef mpl::int_<Index> index;
 
@@ -42,15 +38,8 @@
             BOOST_FUSION_TAG_CHECK(OtherIt,repetitive_view_iterator_tag);
         }
 
-        template<typename OtherSeq>
-        repetitive_view_iterator(
-#ifdef BOOST_NO_RVALUE_REFERENCES
-                typename detail::view_storage<Seq>::call_param seq,
-#else
-                OtherSeq&& other_seq,
-#endif
-                It const& it)
-          : seq(BOOST_FUSION_FORWARD(OtherSeq,other_seq))
+        repetitive_view_iterator(SeqRef seq, It const& it)
+          : seq(&seq)
           , it(it)
         {}
 
@@ -65,7 +54,7 @@
             return *this;
         }
 
-        detail::view_storage<Seq> seq;
+        typename detail::remove_reference<seq_type>::type* seq;
         It it;
     };
 }}
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/repetitive_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/repetitive_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/repetitive_view.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -11,14 +11,19 @@
 
 //TODO doc/testcase/zip_view testcase
 
+#include <boost/fusion/support/deduce.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/category_of.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/internal/workaround.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
 #include <boost/fusion/view/detail/view_storage.hpp>
 
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/long.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+#   include <boost/mpl/eqaul_to.hpp>
+#endif
 #include <boost/integer_traits.hpp>
 
 #include <boost/fusion/view/repetitive_view/detail/repetitive_view_fwd.hpp>
@@ -40,7 +45,7 @@
 {
     struct fusion_sequence_tag;
 
-    template<typename Seq>
+    template<typename Seq, int Size=integer_traits<int>::const_max-1>
     struct repetitive_view
       : sequence_base<repetitive_view<Seq> >
     {
@@ -50,16 +55,16 @@
         typedef typename storage_type::type seq_type;
 
         typedef typename traits::category_of<seq_type>::type category;
-        typedef mpl::int_<integer_traits<int>::const_max-1> size;
+        typedef mpl::int_<Size> size;
         typedef repetitive_view_tag fusion_tag;
         typedef fusion_sequence_tag tag;
         typedef mpl::true_ is_view;
 
 #define BOOST_FUSION_REPETITIVE_VIEW_CTOR(COMBINATION,_)\
         template<typename OtherSeq>\
-        repetitive_view(repetitive_view<OtherSeq> COMBINATION view)\
-          : seq(BOOST_FUSION_FORWARD(\
-                repetitive_view<OtherSeq> COMBINATION,view).seq)\
+        repetitive_view(repetitive_view<OtherSeq,Size> COMBINATION view)\
+          : seq(static_cast<repetitive_view<OtherSeq,Size> COMBINATION>(\
+                view).seq)\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_REPETITIVE_VIEW_CTOR,_)
@@ -84,6 +89,10 @@
         operator=(BOOST_FUSION_R_ELSE_CLREF(OtherView) other_view)
         {
             BOOST_FUSION_TAG_CHECK(OtherView,repetitive_view_tag);
+            BOOST_FUSION_MPL_ASSERT((mpl::equal_to<
+                    size
+                  , detail::remove_reference<OtherView>::type::size
+                >));
 
             seq=BOOST_FUSION_FORWARD(OtherView,other_view).seq;
             return *this;
@@ -92,6 +101,61 @@
         detail::view_storage<Seq> seq;
     };
 
+
+    namespace result_of
+    {
+        template<typename Seq, int Size=integer_traits<int>::const_max-1>
+        struct repeat
+        {
+            typedef
+                repetitive_view<typename traits::deduce<Seq>::type, Size>
+            type;
+        };
+    };
+
+    template<int Size, typename Seq>
+    inline typename
+        result_of::repeat<BOOST_FUSION_R_ELSE_CLREF(Seq),Size>::type
+    repeat(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+    {
+        return typename result_of::repeat<
+            BOOST_FUSION_R_ELSE_CLREF(Seq)
+          , Size
+        >::type(BOOST_FUSION_FORWARD(Seq,seq));
+    }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template<int Size, typename Seq>
+    inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+            result_of::repeat<,Seq,&, Size>)
+    repeat(Seq& seq)
+    {
+        return typename result_of::repeat<Seq&,Size>::type(seq);
+    }
+#endif
+
+    template<typename Seq>
+    inline typename result_of::repeat<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
+    repeat(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+    {
+        return typename result_of::repeat<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type(
+            BOOST_FUSION_FORWARD(Seq,seq));
+    }
+
+    template<typename Seq>
+    //cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
+#   if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
+    typename lazy_disable_if<
+        is_const<Seq>
+      , result_of::repeat<Seq&>
+    >::type
+#   else
+    typename result_of::repeat<Seq&>::type
+#   endif
+    repeat(Seq& seq)
+    {
+        return typename result_of::repeat<Seq&>::type(seq);
+    }
 }}
 
 #endif
Added: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/at_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,48 @@
+/*=============================================================================
+    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_VIEW_REVERSE_VIEW_DETAIL_AT_IMPL_HPP
+#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_AT_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct at_impl;
+
+    template <>
+    struct at_impl<reverse_view_tag>
+    {
+        template <typename Seq, typename N>
+        struct apply
+        {
+            typedef typename detail::remove_reference<Seq>::type seq;
+            typedef mpl::minus<typename seq::size, mpl::int_<1>, N> real_n;
+
+            typedef
+                result_of::at<
+                    typename detail::forward_as<
+                        Seq
+                      , typename seq::seq_type
+                    >::type
+                  , real_n
+                >::type
+            type;
+
+            static type
+            call(Seq seq)
+            {
+                return fusion::at<real_n>(seq.seq.get());
+            }
+        };
+    };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/distance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/distance_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/distance_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -23,10 +23,10 @@
         struct apply
           : result_of::distance<
                 typename detail::remove_reference<
-                    BeginRef
+                    EndRef
                 >::type::it_type
               , typename detail::remove_reference<
-                    EndRef
+                    BeginRef
                 >::type::it_type
             >
         {};
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -24,6 +24,7 @@
         typedef reverse_view_iterator_tag fusion_tag;
         typedef typename traits::category_of<it_type>::type category;
 
+        explicit
         reverse_view_iterator(It const& it)
           : it(it)
         {}
Added: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/value_at_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,38 @@
+/*=============================================================================
+    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_VIEW_REVERSE_VIEW_DETAIL_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_VIEW_REVERSE_VIEW_DETAIL_VALUE_AT_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct value_at_impl;
+
+    template <>
+    struct value_at_impl<reverse_view_tag>
+    {
+        template <typename Seq, typename N>
+        struct apply
+        {
+            typedef typename detail::remove_reference<Seq>::type seq;
+
+            typedef
+                result_of::value_at<
+                    typename seq::seq_type
+                  , mpl::minus<typename seq::size, mpl::int_<1>, N>
+                >::type
+            type;
+        };
+    };
+}}}
+
+#endif
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -23,6 +23,7 @@
 
 #include <boost/fusion/view/reverse_view/detail/reverse_view_fwd.hpp>
 #include <boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp>
+#include <boost/fusion/view/reverse_view/detail/at_impl.hpp>
 #include <boost/fusion/view/reverse_view/detail/begin_impl.hpp>
 #include <boost/fusion/view/reverse_view/detail/end_impl.hpp>
 #include <boost/fusion/view/reverse_view/detail/deref_impl.hpp>
@@ -34,6 +35,7 @@
 #include <boost/fusion/view/reverse_view/detail/equal_to_impl.hpp>
 #include <boost/fusion/view/reverse_view/detail/deref_data_impl.hpp>
 #include <boost/fusion/view/reverse_view/detail/key_of_impl.hpp>
+#include <boost/fusion/view/reverse_view/detail/value_at_impl.hpp>
 #include <boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp>
 
 namespace boost { namespace fusion
@@ -54,7 +56,7 @@
         typedef typename
             mpl::eval_if<
                 traits::is_associative<seq_type>
-              , mpl::inherit2<seq_category,associative_sequence_tag>
+              , mpl::inherit2<seq_category,associative_tag>
               , mpl::identity<seq_category>
             >::type
         category;
Added: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/at_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,38 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    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_SINGLE_VIEW_DETAIL_AT_IMPL_HPP
+#define BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_AT_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct at_impl;
+
+    template<>
+    struct at_impl<single_view_tag>
+    {
+        template<typename Seq, typename>
+        struct apply
+        {
+            typedef typename
+                detail::forward_as<
+                    Seq
+                  , typename detail::remove_reference<Seq>::type::value_type
+                >::type
+            type;
+
+            static type
+            call(Seq seq)
+            {
+                return seq.val;
+            }
+        };
+    };
+}}}
+
+#endif
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -19,14 +19,23 @@
         template <typename Seq>
         struct apply
         {
+            typedef typename detail::remove_reference<Seq>::type seq;
+
             typedef
-                single_view_iterator<typename detail::add_lref<Seq>::type>
+                single_view_iterator<
+                    typename seq::value_type
+                  , typename detail::forward_as<
+                        Seq
+                      , typename seq::value_type
+                    >::type
+                  , false
+                >
             type;
 
             static type
-            call(Seq s)
+            call(Seq seq)
             {
-                return type(s,0);
+                return type(seq.val);
             }
         };
     };
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -22,13 +22,13 @@
         struct apply
         {
             typedef typename
-                detail::remove_reference<It>::type::value_type
+                detail::remove_reference<It>::type::value_ref_type
             type;
 
             static type
             call(It it)
             {
-                return it.view->val;
+                return *it.val;
             }
         };
     };
Added: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/distance_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/distance_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    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_SINGLE_VIEW_DETAIL_DISTANCE_IMPL_HPP
+#define BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_DISTANCE_IMPL_HPP
+
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct distance_impl;
+
+    template<>
+    struct distance_impl<single_view_iterator_tag>
+    {
+        template<typename Begin, typename End>
+        struct apply
+          : mpl::int_<
+                detail::remove_reference<Begin>::type::end::value==
+                    detail::remove_reference<End>::type::end::value
+                ? 0 : 1
+            >
+        {};
+    };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/end_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -19,14 +19,23 @@
         template <typename Seq>
         struct apply
         {
+            typedef typename detail::remove_reference<Seq>::type seq;
+
             typedef
-                single_view_iterator_end<typename detail::add_lref<Seq>::type>
+                single_view_iterator<
+                    typename seq::value_type
+                  , typename detail::forward_as<
+                        Seq
+                      , typename seq::value_type
+                    >::type
+                  , true
+                >
             type;
 
             static type
-            call(Seq)
+            call(Seq seq)
             {
-                return type();
+                return type(seq.val);
             }
         };
     };
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/equal_to_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/equal_to_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/equal_to_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -8,6 +8,8 @@
 #ifndef BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_EQUAL_TO_IMPL_HPP
 #define BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_EQUAL_TO_IMPL_HPP
 
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/equal_to.hpp>
 #include <boost/type_traits/is_same.hpp>
 
 namespace boost { namespace fusion { namespace extension
@@ -20,15 +22,17 @@
     {
         template<typename It1, typename It2>
         struct apply
-          : is_same<
-                typename detail::identity<
-                    typename detail::remove_reference<It1>::type::view_type
-                >::type
-              , typename detail::identity<
-                    typename detail::remove_reference<It2>::type::view_type
-                >::type
-            >
-        {};
+        {
+            typedef typename detail::remove_reference<It1>::type it1;
+            typedef typename detail::remove_reference<It2>::type it2;
+
+            typedef
+                mpl::and_<
+                    is_same<typename it1::value_type, typename it2::value_type>
+                  , mpl::equal_to<typename it1::end, typename it2::end>
+                >
+            type;
+        };
     };
 }}}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/next_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/next_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -1,5 +1,6 @@
 /*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2009 Christopher Schmidt
 
     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)
@@ -19,18 +20,20 @@
         template <typename It>
         struct apply
         {
+            typedef typename detail::remove_reference<It>::type it;
+
             typedef
-                single_view_iterator_end<
-                    typename detail::remove_reference<
-                        It
-                    >::type::view_type
+                single_view_iterator<
+                    typename it::value_type
+                  , typename it::value_ref_type
+                  , true
                 >
             type;
 
             static type
-            call(It)
+            call(It it)
             {
-                return type();
+                return type(*it.val);
             }
         };
     };
Added: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/prior_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/prior_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    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_SINGLE_VIEW_DETAIL_PRIOR_IMPL_HPP
+#define BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_PRIOR_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template <typename>
+    struct prior_impl;
+
+    template <>
+    struct prior_impl<single_view_iterator_tag>
+    {
+        template <typename It>
+        struct apply
+        {
+            typedef typename detail::remove_reference<It>::type it;
+
+            typedef
+                single_view_iterator<
+                    typename it::value_type
+                  , typename it::value_ref_type
+                  , false
+                >
+            type;
+
+            static type
+            call(It it)
+            {
+                return type(*it.val);
+            }
+        };
+    };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_fwd.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_fwd.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -11,6 +11,7 @@
 namespace boost { namespace fusion
 {
     struct single_view_tag;
+    struct random_access_traversal_tag;
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_iterator.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -10,59 +10,32 @@
 #define BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_SINGLE_VIEW_ITERATOR_HPP
 
 #include <boost/fusion/support/iterator_base.hpp>
+#include <boost/mpl/bool.hpp>
 
 namespace boost { namespace fusion
 {
     struct single_view_iterator_tag;
-    struct forward_traversal_tag;
 
-    struct void_;
-
-    template <typename SingleView>
-    struct single_view_iterator_end
-      : iterator_base<single_view_iterator_end<SingleView> >
-    {
-        typedef void_ view_type;
-
-        typedef single_view_iterator_tag fusion_tag;
-        typedef forward_traversal_tag category;
-    };
-
-    template <typename SingleViewRef>
+    //cschmidt: Due to a nasty bug in Proto (ticket #3583,
+    //https://svn.boost.org/trac/boost/ticket/3583) store value_type and
+    //value_ref_type directly, rather than a reference to the view itself.
+    template<typename Value, typename ValueRef, bool End>
     struct single_view_iterator
-      : iterator_base<single_view_iterator<SingleViewRef> >
+      : iterator_base<single_view_iterator<Value, ValueRef, End> >
     {
-        typedef SingleViewRef view_type;
-        typedef typename
-            detail::forward_as<
-                SingleViewRef,
-                typename detail::remove_reference<
-                    SingleViewRef
-                >::type::value_type
-            >::type
-        value_type;
+        typedef Value value_type;
+        typedef ValueRef value_ref_type;
+        typedef mpl::bool_<End> end;
 
         typedef single_view_iterator_tag fusion_tag;
-        typedef forward_traversal_tag category;
-
-        template<typename OtherSingleViewRef>
-        single_view_iterator(single_view_iterator<OtherSingleViewRef> const& it)
-          : view(it.view)
-        {}
+        typedef random_access_traversal_tag category;
 
-        single_view_iterator(SingleViewRef view, int)
-          : view(&view)
+        explicit
+        single_view_iterator(value_ref_type val)
+          : val(&val)
         {}
 
-        template<typename OtherSingleViewRef>
-        single_view_iterator&
-        operator=(single_view_iterator<OtherSingleViewRef> const& it)
-        {
-            view=it.view;
-            return *this;
-        }
-
-        typename detail::remove_reference<SingleViewRef>::type* view;
+        typename detail::remove_reference<value_ref_type>::type* val;
     };
 }}
 
Added: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/value_at_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2009 Christopher Schmidt
+
+    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_SINGLE_VIEW_DETAIL_VALUE_AT_IMPL_HPP
+#define BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_VALUE_AT_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename>
+    struct value_at_impl;
+
+    template<>
+    struct value_at_impl<single_view_tag>
+    {
+        template<typename Seq, typename>
+        struct apply
+        {
+            typedef typename
+                detail::remove_reference<Seq>::type::value_type
+            type;
+        };
+    };
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/value_of_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/value_of_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/value_of_impl.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -19,12 +19,8 @@
         template <typename It>
         struct apply
         {
-            typedef typename
-                detail::remove_reference<
-                    typename detail::remove_reference<
-                        It
-                    >::type::view_type
-                >::type::value_type
+            typedef
+                typename detail::remove_reference<It>::type::value_type
             type;
         };
     };
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -16,6 +16,7 @@
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/deduce.hpp>
+#include <boost/fusion/support/internal/workaround.hpp>
 #include <boost/fusion/support/internal/sequence_assign.hpp>
 
 #include <boost/mpl/bool.hpp>
@@ -27,18 +28,21 @@
 #include <boost/utility/enable_if.hpp>
 
 #include <boost/fusion/view/single_view/detail/single_view_fwd.hpp>
+#include <boost/fusion/view/single_view/detail/at_impl.hpp>
+#include <boost/fusion/view/single_view/detail/value_at_impl.hpp>
 #include <boost/fusion/view/single_view/detail/single_view_iterator.hpp>
 #include <boost/fusion/view/single_view/detail/begin_impl.hpp>
-#include <boost/fusion/view/single_view/detail/end_impl.hpp>
 #include <boost/fusion/view/single_view/detail/deref_impl.hpp>
+#include <boost/fusion/view/single_view/detail/distance_impl.hpp>
+#include <boost/fusion/view/single_view/detail/end_impl.hpp>
+#include <boost/fusion/view/single_view/detail/equal_to_impl.hpp>
 #include <boost/fusion/view/single_view/detail/next_impl.hpp>
+#include <boost/fusion/view/single_view/detail/prior_impl.hpp>
 #include <boost/fusion/view/single_view/detail/value_of_impl.hpp>
-#include <boost/fusion/view/single_view/detail/equal_to_impl.hpp>
 
 namespace boost { namespace fusion
 {
     struct single_view_tag;
-    struct forward_traversal_tag;
     struct fusion_sequence_tag;
 
     template <typename T>
@@ -49,13 +53,13 @@
 
         typedef single_view_tag fusion_tag;
         typedef fusion_sequence_tag tag; 
-        typedef forward_traversal_tag category;
+        typedef random_access_traversal_tag category;
         typedef mpl::true_ is_view;
         typedef mpl::int_<1> size;
 
 #define BOOST_FUSION_SINGLE_VIEW_CTOR(COMBINATION,_)\
         single_view(single_view COMBINATION view)\
-          : val(BOOST_FUSION_FORWARD(single_view COMBINATION,view).val)\
+          : val(static_cast<single_view COMBINATION>(view).val)\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_SINGLE_VIEW_CTOR,_)
@@ -153,21 +157,37 @@
         template<typename T>
         struct make_single_view
         {
-            typedef
-                single_view<
-                    typename traits::deduce<BOOST_FUSION_R_ELSE_CLREF(T)>::type
-                >
-            type;
+            typedef single_view<typename traits::deduce<T>::type> type;
         };
     };
 
     template <typename T>
-    inline typename result_of::make_single_view<T>::type
+    inline typename
+        result_of::make_single_view<BOOST_FUSION_R_ELSE_CLREF(T)>::type
     make_single_view(BOOST_FUSION_R_ELSE_CLREF(T) val)
     {
         return typename result_of::make_single_view<T>::type(
                 BOOST_FUSION_FORWARD(T,val));
     }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename T, typename Seq>
+    //cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
+#   if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
+    typename lazy_disable_if<
+        is_const<T>
+      , result_of::make_single_view<T&>
+    >::type
+#   else
+    typename result_of::make_single_view<T&>::type
+#   endif
+    make_single_view(T& val)
+    {
+        return typename result_of::make_single_view<T&>::type(val);
+    }
+#endif
+
+    //TODO random access
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/transform_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/transform_view_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/transform_view_iterator.hpp	2009-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -41,7 +41,7 @@
         typedef typename
             mpl::eval_if<
                 is_associative
-              , mpl::inherit2<it_category,associative_sequence_tag>
+              , mpl::inherit2<it_category,associative_tag>
               , mpl::identity<it_category>
             >::type
         category;
@@ -99,7 +99,7 @@
         typedef typename
             mpl::eval_if<
                 is_associative
-              , mpl::inherit2<strictest_traversal,associative_sequence_tag>
+              , mpl::inherit2<strictest_traversal,associative_tag>
               , mpl::identity<strictest_traversal>
             >::type
         category;
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-11-03 13:29:12 EST (Tue, 03 Nov 2009)
@@ -38,7 +38,6 @@
 #include <boost/fusion/view/transform_view/transform_view_fwd.hpp>
 #include <boost/fusion/view/transform_view/detail/at_impl.hpp>
 #include <boost/fusion/view/transform_view/detail/value_at_impl.hpp>
-
 #include <boost/fusion/view/transform_view/detail/transform_view_iterator.hpp>
 #include <boost/fusion/view/transform_view/detail/begin_impl.hpp>
 #include <boost/fusion/view/transform_view/detail/end_impl.hpp>
@@ -96,7 +95,7 @@
         typedef typename
             mpl::eval_if<
                 is_associative
-              , mpl::inherit2<strictest_traversal,associative_sequence_tag>
+              , mpl::inherit2<strictest_traversal,associative_tag>
               , mpl::identity<strictest_traversal>
             >::type
         category;
@@ -172,7 +171,7 @@
         typedef typename
             mpl::eval_if<
                 is_associative
-              , mpl::inherit2<seq_category,associative_sequence_tag>
+              , mpl::inherit2<seq_category,associative_tag>
               , mpl::identity<seq_category>
             >::type
         category;