$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r55595 - in sandbox/SOC/2009/fusion: . boost/fusion/adapted boost/fusion/adapted/detail/mpl boost/fusion/algorithm/iteration boost/fusion/algorithm/transformation boost/fusion/algorithm/transformation/detail/pp boost/fusion/container/detail/pp boost/fusion/container/detail/variadic_templates boost/fusion/container/generation/detail/pp boost/fusion/container/list boost/fusion/container/vector boost/fusion/container/vector/detail/pp boost/fusion/include boost/fusion/iterator boost/fusion/mpl boost/fusion/sequence boost/fusion/sequence/intrinsic boost/fusion/support boost/fusion/view/single_view
From: mr.chr.schmidt_at_[hidden]
Date: 2009-08-14 20:08:53
Author: cschmidt
Date: 2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
New Revision: 55595
URL: http://svn.boost.org/trac/boost/changeset/55595
Log:
optimizations
Properties modified: 
   sandbox/SOC/2009/fusion/boost/fusion/include/   (props changed)
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/end_impl.hpp                |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/adapted/std_array.hpp                          |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp               |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp             |    24 ++--------                              
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp     |     6 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp          |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp         |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp                 |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp           |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/as_seq.hpp |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp    |    95 +++++++++++++++++++++++---------------- 
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp    |     6 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp     |    88 +++++++++++++++++++++---------------    
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp     |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp                        |    21 ++++++++                                
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp        |    82 ++++++++++++++++++++++-----------       
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp                    |     5 --                                      
   sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp                          |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/iterator/iterator_facade.hpp                   |     7 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/mpl/at.hpp                                     |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/mpl/erase_key.hpp                              |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp                           |    27 ++++++++++-                             
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp                      |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp                   |    13 ++--                                    
   sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp                        |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp               |     9 +++                                     
   sandbox/SOC/2009/fusion/build.bat                                                   |     6 +-                                      
   sandbox/SOC/2009/fusion/project-root.jam                                            |     2                                         
   28 files changed, 256 insertions(+), 167 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/end_impl.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -11,7 +11,7 @@
 
 #include <boost/mpl/end.hpp>
 
-namespace boost { namespace fusion{ namespace extension
+namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>
     struct end_impl;
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/std_array.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/std_array.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/std_array.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -20,7 +20,6 @@
 #undef BOOST_FUSION_ADAPTED_ARRAY_NAMESPACE
 #undef BOOST_FUSION_ADAPTED_ARRAY_TYPE
 
-#include <boost/fusion/adapted/detail/array/array_iterator.hpp>
 #include <boost/fusion/adapted/detail/array/is_view_impl.hpp>
 #include <boost/fusion/adapted/detail/array/is_sequence_impl.hpp>
 #include <boost/fusion/adapted/detail/array/category_of_impl.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -51,7 +51,7 @@
     inline typename result_of::for_each<Seq&,F const&>::type
     for_each(Seq& seq,F const& f)
     {
-        for_each_unrolled<result_of::size<Seq&>::value>::call(
+        detail::for_each_unrolled<result_of::size<Seq&>::value>::call(
                 fusion::begin(seq),f);
     }
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -14,39 +14,25 @@
 #else
 #   include <boost/fusion/container/vector/vector10.hpp>
 #endif
-#include <boost/fusion/support/is_view.hpp>
 #include <boost/fusion/support/tag_of.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
 
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/eval_if.hpp>
-
 namespace boost { namespace fusion
 {
     namespace result_of
     {
         //TODO doc!!!
-
         template <typename Seq>
         struct clear
-        {
-            //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
-            BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
-
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
-            typedef vector0<> vec;
+          : convert<typename traits::tag_of<Seq>::type, vector0<> >
 #else
-            typedef vector<> vec;
+          : convert<typename traits::tag_of<Seq>::type, vector<> >
 #endif
-
-            typedef typename
-                mpl::eval_if<
-                    traits::is_view<Seq>
-                  , mpl::identity<vec>
-                  , convert<typename traits::tag_of<Seq>::type, vec>
-                >::type
-            type;
+        {
+            //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+            BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
         };
     }
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -63,9 +63,9 @@
         };
     }
 
-    VARIADIC_TEMPLATE_A(N)
+    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
     inline
-#if N
+#if BOOST_FUSION_N
         typename
 #endif
         result_of::zip<
@@ -74,7 +74,7 @@
     zip(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
     {
         return
-#if N
+#if BOOST_FUSION_N
             typename
 #endif
             result_of::zip<
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -11,7 +11,7 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
-#   include <boost/fusion/sequence/intrinsic/size.hpp>
+#   include <boost/fusion/sequence/intrinsic/empty.hpp>
 #endif
 #include <boost/fusion/iterator/prior.hpp>
 #include <boost/fusion/view/iterator_range/iterator_range.hpp>
@@ -27,7 +27,7 @@
         {
             //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
             BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
-            BOOST_FUSION_MPL_ASSERT((size<Seq>));
+            BOOST_FUSION_MPL_ASSERT_NOT((empty<Seq>));
 
             typedef 
                 iterator_range<
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -11,7 +11,7 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
-#   include <boost/fusion/sequence/intrinsic/size.hpp>
+#   include <boost/fusion/sequence/intrinsic/empty.hpp>
 #endif
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/view/iterator_range/iterator_range.hpp>
@@ -27,7 +27,7 @@
         {
             //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
             BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
-            BOOST_FUSION_MPL_ASSERT((size<Seq>));
+            BOOST_FUSION_MPL_ASSERT_NOT((empty<Seq>));
 
             typedef 
                 iterator_range<
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-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -36,7 +36,7 @@
         template <typename It0>
         struct apply
         {
-#if N
+#if BOOST_FUSION_N
             typedef typename result_of::value_of<It0>::type T0;
 #endif
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_ctor.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -29,7 +29,7 @@
 #   ifndef BOOST_NO_RVALUE_REFERENCES
     VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
 #   endif
-#   if N == 1
+#   if BOOST_FUSION_N == 1
     explicit
 #   endif
 #   ifdef BOOST_NO_RVALUE_REFERENCES
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/as_seq.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/as_seq.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/variadic_templates/as_seq.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -6,7 +6,7 @@
 #include <boost/fusion/mpl/begin.hpp>
 #include <boost/fusion/mpl/end.hpp>
 #include <boost/fusion/support/internal/variadic_templates/variadic_quote.hpp>
-#include <boost/fusion/support/internal/to_random_access_mpl_seq.hpp>
+#include <boost/fusion/support/internal/variadic_templates/to_random_access_mpl_seq.hpp>
 
 #include <boost/mpl/apply.hpp>
 #include <boost/mpl/unpack_args.hpp>
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -3,7 +3,6 @@
 // (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
-
 #ifndef BOOST_PP_IS_ITERATING
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_MAP_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_MAP_HPP
@@ -14,21 +13,31 @@
 
 #include <boost/preprocessor/iterate.hpp>
 #include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/arithmetic/mul.hpp>
-#include <boost/preprocessor/arithmetic/add.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
 #include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
 
 namespace boost { namespace fusion
 {
     namespace result_of
     {
-        VARIADIC_TEMPLATE_WITH_DEFAULT(BOOST_PP_MUL(FUSION_MAX_MAP_SIZE,2))
+        template<
+            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+                    FUSION_MAX_MAP_SIZE,
+                    typename K,
+                    void_)
+          , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+                    FUSION_MAX_MAP_SIZE,
+                    typename T,
+                    void_)
+        >
         struct make_map;
     }
     
 #define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_map.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
+#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_MAP_SIZE)
 #include BOOST_PP_ITERATE()
 
 }}
@@ -37,63 +46,71 @@
 #else
 
 #define BOOST_FUSION_N BOOST_PP_ITERATION()
+#if BOOST_FUSION_N
+#   define BOOST_FUSION_COMMA ,
+#else
+#   define BOOST_FUSION_COMMA
+#endif
 
     namespace result_of
     {
-        VARIADIC_TEMPLATE(BOOST_PP_MUL(BOOST_FUSION_N,2))
+        template<
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
+            BOOST_FUSION_COMMA
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
+        >
         struct make_map
-        EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
-            BOOST_PP_MUL(FUSION_MAX_MAP_SIZE,2),
-            BOOST_PP_MUL(BOOST_FUSION_N,2))
+#if BOOST_FUSION_N!=FUSION_MAX_MAP_SIZE
+        <
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+            BOOST_FUSION_COMMA
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
+        >
+#endif
         {
-#define BOOST_FUSION_MAP_ELEMENT(Z,INNER_N,_)\
+#define BOOST_FUSION_MAP_ELEMENT(Z,N,_)\
             pair<\
-                BOOST_PP_CAT(T,INNER_N),\
-                typename detail::as_fusion_element<\
-                    BOOST_PP_CAT(T,BOOST_PP_ADD(BOOST_FUSION_N,INNER_N))\
-                >::type\
+                BOOST_PP_CAT(K,N)\
+              , typename detail::as_fusion_element<BOOST_PP_CAT(T,N)>::type\
             >
 
-            typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_MAP_ELEMENT, _)> type;
+            typedef
+                map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
+            type;
 
 #undef BOOST_FUSION_MAP_ELEMENT
         };
     }
 
-#define BOOST_FUSION_MAKE_MAP_ARGS2(Z,INNER_N,_)\
-    BOOST_PP_CAT(A,BOOST_PP_ADD(N,INNER_N))\
-        BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY())
-
-    VARIADIC_TEMPLATE_A(BOOST_PP_MUL(BOOST_FUSION_N,2))
+#if BOOST_FUSION_N
+    template<
+        BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
+      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename A)
+    >
+#endif
     inline
-#if N
+#if BOOST_FUSION_N
         typename
 #endif
         result_of::make_map<
-            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, A)
-          , BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAKE_MAP_ARGS2, _)
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+            BOOST_FUSION_COMMA
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
         >::type
-
-#define BOOST_FUSION_MAKE_MAP_ARGUMENTS(Z,INNER_N,__)\
-    BOOST_PP_CAT(A,BOOST_PP_ADD(BOOST_FUSION_N,INNER_N))\
-        BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY())\
-    BOOST_PP_CAT(_,INNER_N)
-
-    make_map(BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAKE_MAP_ARGUMENTS, _))
-
-#undef BOOST_FUSION_MAKE_MAP_ARGUMENTS
+    make_map(
+        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
     {
         return
-#if N
+#if BOOST_FUSION_N
             typename
 #endif
             result_of::make_map<
-                BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, A)
-              , BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAKE_MAP_ARGS2, _)
-            >::type(EXPAND_PARAMETERS_A(N));
+                BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+                BOOST_FUSION_COMMA
+                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+            >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
     }
 
-#undef BOOST_FUSION_MAKE_MAP_ARGS2
-
+#undef BOOST_FUSION_COMMA
 #undef BOOST_FUSION_N
 #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-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -31,7 +31,7 @@
 
     namespace result_of
     {
-        VARIADIC_TEMPLATE(N)
+        VARIADIC_TEMPLATE(BOOST_FUSION_N)
         struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME)
             EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
                 BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
@@ -50,7 +50,7 @@
 
     VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
     inline
-#if N
+#if BOOST_FUSION_N
         typename
 #endif
         result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME)<
@@ -60,7 +60,7 @@
         EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
     {
         return
-#if N
+#if BOOST_FUSION_N
             typename
 #endif
             result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME)<
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -3,7 +3,6 @@
 // (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
-
 #ifndef BOOST_PP_IS_ITERATING
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAP_TIE_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAP_TIE_HPP
@@ -14,21 +13,31 @@
 
 #include <boost/preprocessor/iterate.hpp>
 #include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/arithmetic/mul.hpp>
-#include <boost/preprocessor/arithmetic/add.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
 #include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
 
 namespace boost { namespace fusion
 {
     namespace result_of
     {
-        VARIADIC_TEMPLATE_WITH_DEFAULT(BOOST_PP_MUL(FUSION_MAX_MAP_SIZE,2))
+        template<
+            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+                    FUSION_MAX_MAP_SIZE,
+                    typename K,
+                    void_)
+          , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+                    FUSION_MAX_MAP_SIZE,
+                    typename T,
+                    void_)
+        >
         struct map_tie;
     }
     
 #define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/map_tie.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
+#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_MAP_SIZE)
 #include BOOST_PP_ITERATE()
 
 }}
@@ -37,21 +46,32 @@
 #else
 
 #define BOOST_FUSION_N BOOST_PP_ITERATION()
+#if BOOST_FUSION_N
+#   define BOOST_FUSION_COMMA ,
+#else
+#   define BOOST_FUSION_COMMA
+#endif
 
     namespace result_of
     {
-        VARIADIC_TEMPLATE(BOOST_PP_MUL(BOOST_FUSION_N,2))
+        template<
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
+            BOOST_FUSION_COMMA
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
+        >
         struct map_tie
-        EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
-            BOOST_PP_MUL(FUSION_MAX_MAP_SIZE,2),
-            BOOST_PP_MUL(BOOST_FUSION_N,2))
+#if BOOST_FUSION_N!=FUSION_MAX_MAP_SIZE
+        <
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+            BOOST_FUSION_COMMA
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
+        >
+#endif
         {
-#define BOOST_FUSION_MAP_ELEMENT(Z,INNER_N,_)\
+#define BOOST_FUSION_MAP_ELEMENT(Z,N,_)\
             pair<\
-                BOOST_PP_CAT(T,INNER_N),\
-                typename detail::as_fusion_element_ref<\
-                    BOOST_PP_CAT(T,BOOST_PP_ADD(N,INNER_N))\
-                >::type\
+                BOOST_PP_CAT(K,N)\
+              , typename detail::as_fusion_element_ref<BOOST_PP_CAT(T,N)>::type\
             >
 
             typedef
@@ -62,40 +82,34 @@
         };
     }
 
-#define BOOST_FUSION_MAP_TIE_ARGS2(Z,INNER_N,_)\
-    BOOST_PP_CAT(A,BOOST_PP_ADD(N,INNER_N))\
-        BOOST_FUSION_R_ELSE_LREF(BOOST_PP_EMPTY())
-
-    VARIADIC_TEMPLATE_A(BOOST_PP_MUL(BOOST_FUSION_N,2))
+#if BOOST_FUSION_N
+    template<
+        BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
+      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename A)
+    >
+#endif
     inline
-#if N
+#if BOOST_FUSION_N
         typename
 #endif
         result_of::map_tie<
-            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, A)
-          , BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_TIE_ARGS2, _)
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+            BOOST_FUSION_COMMA
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
         >::type
-
-#define BOOST_FUSION_MAP_TIE_ARGUMENTS(Z,INNER_N,__)\
-    BOOST_PP_CAT(A,BOOST_PP_ADD(BOOST_FUSION_N,INNER_N))\
-        BOOST_FUSION_R_ELSE_LREF(BOOST_PP_EMPTY())\
-    BOOST_PP_CAT(_,INNER_N)
-
-    map_tie(BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_TIE_ARGUMENTS, _))
-
-#undef BOOST_FUSION_MAP_TIE_ARGUMENTS
+    map_tie(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
     {
         return
-#if N
+#if BOOST_FUSION_N
             typename
 #endif
             result_of::map_tie<
-                BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, A)
-              , BOOST_PP_ENUM(N, BOOST_FUSION_MAP_TIE_ARGS2, _)
+                BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+                BOOST_FUSION_COMMA
+                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
             >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
     }
 
-#undef BOOST_FUSION_MAP_TIE_ARGS2
-
+#undef BOOST_FUSION_COMMA
 #undef BOOST_FUSION_N
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -50,7 +50,7 @@
 
     VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
     inline
-#if N
+#if BOOST_FUSION_N
         typename
 #endif
         result_of::BOOST_FUSION_FUNCTION_NAME<
@@ -60,7 +60,7 @@
         EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
     {
         return
-#if N
+#if BOOST_FUSION_N
             typename
 #endif
             result_of::BOOST_FUSION_FUNCTION_NAME<
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-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -26,6 +26,9 @@
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/or.hpp>
 //#include <boost/utility/enable_if.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+#   include <boost/mpl/equal_to.hpp>
+#endif
 #ifdef BOOST_NO_RVALUE_REFERENCES
 #   include <boost/call_traits.hpp>
 #endif
@@ -154,7 +157,10 @@
           : car(fusion::front(seq_assign.get()))\
           , cdr(detail::assign_by_deref(),\
                   fusion::next(fusion::begin(seq_assign.get())))\
-        {}
+        {\
+            BOOST_FUSION_MPL_ASSERT_NOT((\
+                mpl::equal_to<size,result_of::size<SeqRef> >));\
+        }
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_CONS_ASSIGN_CTOR,_);
 
@@ -187,10 +193,23 @@
         cons&
         operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
         {
+            BOOST_FUSION_MPL_ASSERT_NOT((result_of::empty<Seq>));
+
             assign(fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
             return *this;
         }
 
+        template<typename Seq>
+        cons&
+        operator=(cons const& seq)
+        {
+#ifdef BOOST_NO_RVALUE_REFERENCES
+            return this->operator=<cons<Car,Cdr> >(seq);
+#else
+            return this->operator=<cons<Car,Cdr> const&>(seq);
+#endif
+        }
+
         template<typename It>
         void
         assign(It const& it)
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-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -5,6 +5,9 @@
 
 #ifndef BOOST_PP_IS_ITERATING
 #   include <boost/fusion/container/vector/vector_fwd.hpp>
+#   ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+#       include <boost/fusion/sequence/intrinsic/size.hpp>
+#   endif
 #   include <boost/fusion/sequence/intrinsic/begin.hpp>
 #   include <boost/fusion/iterator/deref.hpp>
 #   include <boost/fusion/iterator/next.hpp>
@@ -26,6 +29,9 @@
 #   include <boost/mpl/int.hpp>
 #   include <boost/mpl/bool.hpp>
 #   include <boost/mpl/at.hpp>
+#   ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+#       include <boost/mpl/equal_to.hpp>
+#   endif
 
 #   include <boost/type_traits/add_const.hpp>
 #   include <boost/utility/enable_if.hpp>
@@ -39,22 +45,17 @@
 #   include <boost/fusion/container/vector/detail/end_impl.hpp>
 #   include <boost/fusion/container/vector/detail/deref_impl.hpp>
 #   include <boost/fusion/container/vector/detail/value_of_impl.hpp>
-#   include <boost/fusion/container/vector/detail/next_impl.hpp>
-#   include <boost/fusion/container/vector/detail/prior_impl.hpp>
-#   include <boost/fusion/container/vector/detail/equal_to_impl.hpp>
-#   include <boost/fusion/container/vector/detail/distance_impl.hpp>
-#   include <boost/fusion/container/vector/detail/advance_impl.hpp>
 
 #   define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/pp/vector_n.hpp>
 #   define BOOST_PP_ITERATION_LIMITS (BOOST_FUSION_FROM, BOOST_FUSION_TO)
 #   include BOOST_PP_ITERATE()
 
 #else
-#   define N BOOST_PP_ITERATION()
+#   define BOOST_FUSION_N BOOST_PP_ITERATION()
 
 namespace boost { namespace fusion
 {
-#   if !N
+#   if !BOOST_FUSION_N
     struct void_;
 
     template <typename T0=void_>
@@ -66,12 +67,15 @@
 #   else
     template <BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)>
     struct BOOST_PP_CAT(vector, BOOST_FUSION_N)
-      : sequence_base<BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N,T)> >
+      : sequence_base<BOOST_PP_CAT(vector, BOOST_FUSION_N)<
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N,T)>
+        >
 #   endif
     {
         typedef
-            mpl::BOOST_PP_CAT(vector, BOOST_FUSION_N)
-                <BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)>
+            mpl::BOOST_PP_CAT(vector, BOOST_FUSION_N)<
+                BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
+            >
         types;
         typedef vector_tag fusion_tag;
         typedef fusion_sequence_tag tag; 
@@ -89,7 +93,7 @@
 
 #   undef BOOST_FUSION_DEFAULT_MEMBER_INIT
 
-#   if N
+#   if BOOST_FUSION_N
 #       define BOOST_FUSION_SELF_TYPE\
             BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N,T)>
 
@@ -99,9 +103,11 @@
                     BOOST_PP_CAT(m,N))
 
 #       define BOOST_FUSION_VECTOR_CTOR(COMBINATION,_)\
-        BOOST_PP_CAT(vector, N)(\
-            BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N,T)> COMBINATION vec)\
-          : BOOST_PP_ENUM(N, BOOST_FUSION_MEMBER_INIT, COMBINATION)\
+        BOOST_PP_CAT(vector, BOOST_FUSION_N)(\
+            BOOST_PP_CAT(vector, BOOST_FUSION_N)<\
+                BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N,T)\
+            > COMBINATION vec)\
+          : BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MEMBER_INIT, COMBINATION)\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_VECTOR_CTOR,_)
@@ -114,12 +120,12 @@
             BOOST_PP_CAT(vector, BOOST_FUSION_N)<void_> COMBINATION vec)\
         {}
 
-        BOOST_FUSION_ALL_CTOR_COMBINATIONS(VECTOR_CTOR,_)
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_VECTOR_CTOR,_)
 
 #   endif
 #   undef BOOST_FUSION_VECTOR_CTOR
 
-#   if N
+#   if BOOST_FUSION_N
 #       define BOOST_FUSION_MEMBER_INIT(Z, N, _)\
         BOOST_PP_CAT(m,N)(\
             BOOST_FUSION_FORWARD(BOOST_PP_CAT(A,N), BOOST_PP_CAT(_,N)))
@@ -143,7 +149,7 @@
                     BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_EMPTY()) _)
 #endif
             )
-          : BOOST_PP_ENUM(N, BOOST_FUSION_MEMBER_INIT, _)
+          : BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MEMBER_INIT, _)
         {}
 
 #       undef BOOST_FUSION_MEMBER_INIT
@@ -155,10 +161,13 @@
             fusion::advance_c<N>(fusion::begin(seq_assign.get()))))
 #       define BOOST_FUSION_VECTOR_ASSIGN_CTOR(COMBINATION,_)\
         template<typename SeqRef>\
-        BOOST_PP_CAT(vector,N)(\
+        BOOST_PP_CAT(vector,BOOST_FUSION_N)(\
             detail::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
-          : BOOST_PP_ENUM(N, BOOST_FUSION_MEMBER_INIT, _)\
-        {}
+          : BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MEMBER_INIT, _)\
+        {\
+            BOOST_FUSION_MPL_ASSERT((\
+                    mpl::equal_to<size,result_of::size<SeqRef> >));\
+        }
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_VECTOR_ASSIGN_CTOR,_);
 
@@ -167,20 +176,28 @@
 #   else
 #       define BOOST_FUSION_VECTOR_ASSIGN_CTOR(COMBINATION,_)\
         template<typename SeqRef>\
-        BOOST_PP_CAT(vector,N)(\
+        BOOST_PP_CAT(vector,BOOST_FUSION_N)(\
             detail::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
-        {}
+        {\
+            BOOST_FUSION_MPL_ASSERT((\
+                    mpl::equal_to<size,result_of::size<SeqRef> >));\
+        }
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_VECTOR_ASSIGN_CTOR,_);
 
-#       undef VBOOST_FUSION_ECTOR_ASSIGN_CTOR
+#       undef BOOST_FUSION_VECTOR_ASSIGN_CTOR
 #   endif
 
         template <typename Seq>
-        BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>&
+        BOOST_PP_CAT(vector, BOOST_FUSION_N)<
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
+        >&
         operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
         {
-#   if N
+            BOOST_FUSION_MPL_ASSERT((
+                mpl::equal_to<size,result_of::size<Seq> >));
+
+#   if BOOST_FUSION_N
             typedef typename
                 result_of::begin<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
             It0;
@@ -197,7 +214,11 @@
             \
             BOOST_PP_CAT(m, N) = fusion::deref(BOOST_PP_CAT(it, N));
 
-            BOOST_PP_REPEAT_FROM_TO(1, N, BOOST_FUSION_DEREF_MEMBER_ASSIGN, _)
+            BOOST_PP_REPEAT_FROM_TO(
+                    1,
+                    BOOST_FUSION_N,
+                    BOOST_FUSION_DEREF_MEMBER_ASSIGN,
+                    _)
 
 #       undef BOOST_FUSION_DEREF_MEMBER_ASSIGN
 #   endif
@@ -205,8 +226,13 @@
             return *this;
         }
 
-        BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>&
-        operator=(BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)>const& seq)
+        BOOST_PP_CAT(vector, BOOST_FUSION_N)<
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
+        >&
+        operator=(
+            BOOST_PP_CAT(vector, BOOST_FUSION_N)<
+                BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
+            >const& seq)
         {
 #ifdef BOOST_NO_RVALUE_REFERENCES
             return this->operator=<
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -20,11 +20,6 @@
 #   include <boost/fusion/container/vector/detail/end_impl.hpp>
 #   include <boost/fusion/container/vector/detail/deref_impl.hpp>
 #   include <boost/fusion/container/vector/detail/value_of_impl.hpp>
-#   include <boost/fusion/container/vector/detail/next_impl.hpp>
-#   include <boost/fusion/container/vector/detail/prior_impl.hpp>
-#   include <boost/fusion/container/vector/detail/equal_to_impl.hpp>
-#   include <boost/fusion/container/vector/detail/distance_impl.hpp>
-#   include <boost/fusion/container/vector/detail/advance_impl.hpp>
 
 #   include <boost/fusion/container/vector/detail/variadic_templates/vector.hpp>
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -22,7 +22,6 @@
         template <typename Tag>
         struct distance_impl
         {
-            // default implementation
             template <typename FirstRef, typename LastRef>
             struct apply
               : distance_detail::linear_distance<FirstRef, LastRef>
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/iterator_facade.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/iterator_facade.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/iterator_facade.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -10,7 +10,9 @@
 #include <boost/fusion/iterator/detail/advance.hpp>
 #include <boost/fusion/support/iterator_base.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
-#include <boost/fusion/support/internal/dummy_tag.hpp>
+
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
 
 namespace boost { namespace fusion
 {
@@ -33,11 +35,10 @@
 
         //TODO doc
 
-        // default implementation
         template <typename ItRef, typename N>
         struct advance
           :  extension::advance_impl<
-                 typename detail::get_dummy_tag<ItRef>::type
+                 typename mpl::apply<mpl::always<void_>,ItRef>::type
              >::template apply<ItRef,N>
         {};
     };
Modified: sandbox/SOC/2009/fusion/boost/fusion/mpl/at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/mpl/at.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/mpl/at.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -10,7 +10,8 @@
 
 #include <boost/fusion/sequence/intrinsic/value_at.hpp>
 
-namespace boost {
+namespace boost
+{
     namespace fusion
     {
         struct fusion_sequence_tag;
Modified: sandbox/SOC/2009/fusion/boost/fusion/mpl/erase_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/mpl/erase_key.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/mpl/erase_key.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -29,7 +29,8 @@
 
             typedef typename
                 fusion::result_of::convert<
-                    typename fusion::traits::tag_of<Seq>::type, result
+                    typename fusion::traits::tag_of<Seq>::type
+                  , result
                 >::type
             type;
         };
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -8,16 +8,37 @@
 #ifndef BOOST_FUSION_SEQUENCE_CONVERT_HPP
 #define BOOST_FUSION_SEQUENCE_CONVERT_HPP
 
+#include <boost/config.hpp>
+#include <boost/fusion/container/vector/convert.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
 
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+
+//TODO in /sequence/intrisic/ or /container/?
 //TODO doc!!!
 namespace boost { namespace fusion
 {
+    struct void_;
+
     namespace extension
     {
         template <typename Tag>
-        struct convert_impl;
+        struct convert_impl
+        {
+            template<typename SeqRef>
+            struct apply
+            {
+                typedef typename result_of::as_vector<SeqRef>::type type;
+
+                static type
+                call(SeqRef seq)
+                {
+                    return fusion::as_vector(seq);
+                }
+            };
+        };
     }
 
     namespace result_of
@@ -30,8 +51,8 @@
 
             typedef typename extension::convert_impl<Tag> gen;
 
-            typedef typename gen::
-                template apply<typename detail::add_lref<Seq>::type>::type
+            typedef typename
+                gen::template apply<typename detail::add_lref<Seq>::type>::type
             type;
         };
     }
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -58,6 +58,7 @@
                       , list_tag
                     >
                 >));
+
             BOOST_FUSION_INDEX_CHECK(N::value,size<Seq>::value);
         };
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -7,8 +7,9 @@
 #define BOOST_FUSION_SEQUENCE_SEQUENCE_FACADE_HPP
 
 #include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/support/internal/dummy_tag.hpp>
 
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/always.hpp>
 #include <boost/mpl/bool.hpp>
 
 namespace boost { namespace fusion
@@ -50,35 +51,35 @@
         template<typename SeqRef,typename Key>
         struct at_key
           : extension::at_key_impl<
-                typename detail::get_dummy_tag<SeqRef>::type
+                typename mpl::apply<mpl::always<void_>,SeqRef>::type
             >::template apply<SeqRef,Key>
         {};
 
         template<typename SeqRef>
         struct empty
           : extension::empty_impl<
-                typename detail::get_dummy_tag<SeqRef>::type
+                typename mpl::apply<mpl::always<void_>,SeqRef>::type
             >::template apply<SeqRef>
         {};
 
         template<typename SeqRef>
         struct size
           : extension::size_impl<
-                typename detail::get_dummy_tag<SeqRef>::type
+                typename mpl::apply<mpl::always<void_>,SeqRef>::type
             >::template apply<SeqRef>
         {};
 
         template<typename SeqRef,typename Key>
         struct has_key
           : extension::has_key_impl<
-                typename detail::get_dummy_tag<SeqRef>::type
+                typename mpl::apply<mpl::always<void_>,SeqRef>::type
             >::template apply<SeqRef,Key>
         {};
 
         template<typename SeqRef,typename Key>
         struct value_at_key
           : extension::value_at_key_impl<
-                typename detail::get_dummy_tag<SeqRef>::type
+                typename mpl::apply<mpl::always<void_>,SeqRef>::type
             >::template apply<SeqRef,Key>
         {};
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -8,6 +8,7 @@
 #ifndef BOOST_FUSION_SUPPORT_IS_ITERATOR_HPP
 #define BOOST_FUSION_SUPPORT_IS_ITERATOR_HPP
 
+#include <boost/fusion/support/tag_of.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/iterator_base.hpp>
 
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-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -8,6 +8,9 @@
 #ifndef BOOST_FUSION_VIEW_SINGLE_VIEW_SINGLE_VIEW_HPP
 #define BOOST_FUSION_VIEW_SINGLE_VIEW_SINGLE_VIEW_HPP
 
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+#   include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
 #include <boost/fusion/sequence/intrinsic/front.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
@@ -78,7 +81,9 @@
         single_view(\
             detail::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
           : val(fusion::front(seq_assign.get()))\
-        {}
+        {\
+            BOOST_FUSION_STATIC_ASSERT((result_of::size<SeqRef>::value==1));\
+        }
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_SINGLE_VIEW_ASSIGN_CTOR,_)
 
@@ -97,6 +102,8 @@
         single_view&\
         operator=(detail::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
         {\
+            BOOST_FUSION_STATIC_ASSERT((result_of::size<SeqRef>::value==1));\
+            \
             val=fusion::front(seq_assign.get());\
             return *this;\
         }
Modified: sandbox/SOC/2009/fusion/build.bat
==============================================================================
--- sandbox/SOC/2009/fusion/build.bat	(original)
+++ sandbox/SOC/2009/fusion/build.bat	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -16,7 +16,7 @@
         call :msvc
     ) else (
         if "%1" == "" (
-            call :gcc
+            call :msvc
         ) else (
             echo Unknown toolset '%1'
             goto :eof
@@ -29,8 +29,8 @@
 goto :eof
 
 :gcc
-rem set PATH=C:\MinGW3\bin;%PATH%
-set PATH=C:\MinGW\bin;%PATH%
+set PATH=C:\MinGW3\bin;%PATH%
+rem set PATH=C:\MinGW\bin;%PATH%
 set TOOLSET=gcc
 goto :eof
 
Modified: sandbox/SOC/2009/fusion/project-root.jam
==============================================================================
--- sandbox/SOC/2009/fusion/project-root.jam	(original)
+++ sandbox/SOC/2009/fusion/project-root.jam	2009-08-14 20:08:51 EDT (Fri, 14 Aug 2009)
@@ -10,7 +10,7 @@
     : requirements <include>.
                    <include>$(BOOST_INCLUDES_PATH)
                    <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
-                   <toolset>gcc:<cxxflags>-std=c++0x
+#                   <toolset>gcc:<cxxflags>-std=c++0x
     : build-dir ../bin
     : default-build debug <link>shared <runtime-link>shared <threading>multi
     ;