$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r60219 - in sandbox/SOC/2009/fusion: boost/fusion/algorithm/query boost/fusion/algorithm/transformation boost/fusion/algorithm/transformation/detail/pp boost/fusion/container/detail/pp boost/fusion/container/generation/detail/pp boost/fusion/container/generation/detail/variadic_templates boost/fusion/container/list/detail/pp boost/fusion/container/vector/detail/pp boost/fusion/container/vector/detail/variadic_templates boost/fusion/functional/adapter boost/fusion/functional/adapter/detail boost/fusion/functional/adapter/detail/0x boost/fusion/functional/adapter/detail/no_0x boost/fusion/functional/adapter/detail/pp boost/fusion/functional/generation boost/fusion/functional/generation/detail boost/fusion/functional/invocation boost/fusion/functional/invocation/detail boost/fusion/functional/invocation/detail/0x boost/fusion/functional/invocation/detail/no_0x boost/fusion/functional/invocation/detail/pp boost/fusion/functional/invocation/detail/variadic_templates boost/fusion/sequence boost/fusion/sequence/convenience boost/fusion/support/internal boost/fusion/view/detail boost/fusion/view/nview boost/fusion/view/nview/detail/pp boost/fusion/view/reverse_view boost/fusion/view/single_view boost/fusion/view/zip_view libs/fusion/test/algorithm libs/fusion/test/functional
From: mr.chr.schmidt_at_[hidden]
Date: 2010-03-05 18:59:33
Author: cschmidt
Date: 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
New Revision: 60219
URL: http://svn.boost.org/trac/boost/changeset/60219
Log:
new functional impl
Added:
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/fused_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_invocation_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_typed_impl_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl_n.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/variadic_templates/
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/variadic_templates/invoke_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview_n.hpp   (contents, props changed)
Removed:
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/0x/
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/no_0x/
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/0x/
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/no_0x/
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp                                |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp                          |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp                  |    54 --------------                          
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp                         |     5                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp                              |    44 -----------                             
   sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp                   |    48 +++---------                            
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp                 |    76 --------------------                    
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp                 |    53 -------------                           
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp                  |    75 -------------------                     
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp                  |    51 -------------                           
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_map.hpp |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp  |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp                       |    43 +---------                              
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp              |    43 +----------                             
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp             |    61 +++++----------                         
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_n.hpp     |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused.hpp                                |    16 +--                                     
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_function_object.hpp                |    16 +--                                     
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_procedure.hpp                      |    16 +--                                     
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/limits.hpp                               |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused.hpp                              |   119 +++++++++++++++++++++++++++++++-        
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused_typed.hpp                        |   147 ++++++++++++++++++++++++++++++++++++++- 
   sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp           |     8 +-                                      
   sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused.hpp                        |    13 +--                                     
   sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_function_object.hpp        |    13 +--                                     
   sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_procedure.hpp              |    13 +--                                     
   sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_unfused.hpp                      |    13 +--                                     
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp                   |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke.hpp                            |    19 ++--                                    
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_function_object.hpp            |    21 +++--                                   
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_procedure.hpp                  |    21 +++--                                   
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/limits.hpp                            |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/sequence/convenience/copy.hpp                               |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp                                |     1                                         
   sandbox/SOC/2009/fusion/boost/fusion/support/internal/result_of.hpp                              |    73 ++++++++++++++-----                     
   sandbox/SOC/2009/fusion/boost/fusion/support/internal/template.hpp                               |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp                                |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp                                        |     4                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp                          |     3                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp                            |     2                                         
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp                                  |     4                                         
   sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/remove_if.cpp                                 |     4                                         
   sandbox/SOC/2009/fusion/libs/fusion/test/functional/invoke.cpp                                   |     4                                         
   sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused.cpp                                  |     3                                         
   sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused_typed.cpp                            |     3                                         
   45 files changed, 473 insertions(+), 643 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -58,7 +58,7 @@
         >::type
     count_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_RREF_ELSE_OBJ(F) f)
     {
-        return fold(BOOST_FUSION_FORWARD(Seq,seq),
+        return fusion::fold(BOOST_FUSION_FORWARD(Seq,seq),
             0,
             detail::count_if_helper<BOOST_FUSION_RREF_ELSE_OBJ(F)>(f));
     }
@@ -68,7 +68,7 @@
     inline typename result_of::count_if<Seq&,F>::type
     count_if(Seq& seq, F f)
     {
-        return fold(seq,
+        return fusion::fold(seq,
             0,
             detail::count_if_helper<F>(f));
     }
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -24,7 +24,7 @@
 {
     namespace result_of
     {
-        //TODO doc!!!
+        //TODO empty sequence!!!
         template <typename Seq>
         struct clear
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -7,7 +7,6 @@
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_PP_IS_ITERATING
 #ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_PP_ZIP_HPP
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_PP_ZIP_HPP
 
@@ -30,61 +29,10 @@
         struct zip;
     }
 
-#define BOOST_PP_FILENAME_1 <boost/fusion/algorithm/transformation/detail/pp/zip.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/algorithm/transformation/detail/pp/zip_n.hpp>
 #define BOOST_PP_ITERATION_LIMITS (2, FUSION_MAX_ZIP_SEQUENCES)
 #include BOOST_PP_ITERATE()
 
 }}
 
 #endif
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        VARIADIC_TEMPLATE(BOOST_FUSION_N)
-        struct zip
-            EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
-                    FUSION_MAX_ZIP_SEQUENCES,BOOST_FUSION_N)
-        {
-#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERS
-#define BOOST_FUSION_IS_FORWARD_ASSERT(Z,N,_)\
-            BOOST_FUSION_MPL_ASSERT((traits::is_forward<BOOST_PP_CAT(T,N)>));
-
-            BOOST_PP_REPEAT(BOOST_FUSION_N,BOOST_FUSION_IS_FORWARD_ASSERT,_)
-
-#undef BOOST_FUSION_IS_FORWARD_ASSERT
-#endif
-
-            typedef
-                zip_view<
-                    typename result_of::vector_tie<
-                        EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
-                    >::type
-                >
-            type;
-        };
-    }
-
-    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
-    inline
-#if BOOST_FUSION_N
-        typename
-#endif
-        result_of::zip<
-            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
-        >::type
-    zip(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
-    {
-        return
-#if BOOST_FUSION_N
-            typename
-#endif
-            result_of::zip<
-                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
-            >::type(fusion::vector_tie(EXPAND_PARAMETERS_A(BOOST_FUSION_N)));
-    }
-
-#undef BOOST_FUSION_N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,55 @@
+/*=============================================================================
+    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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        VARIADIC_TEMPLATE(BOOST_FUSION_N)
+        struct zip
+            EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+                    FUSION_MAX_ZIP_SEQUENCES,BOOST_FUSION_N)
+        {
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERS
+#define BOOST_FUSION_IS_FORWARD_ASSERT(Z,N,_)\
+            BOOST_FUSION_MPL_ASSERT((traits::is_forward<BOOST_PP_CAT(T,N)>));
+
+            BOOST_PP_REPEAT(BOOST_FUSION_N,BOOST_FUSION_IS_FORWARD_ASSERT,_)
+
+#undef BOOST_FUSION_IS_FORWARD_ASSERT
+#endif
+
+            typedef
+                zip_view<
+                    typename result_of::vector_tie<
+                        EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
+                    >::type
+                >
+            type;
+        };
+    }
+
+    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+    inline
+#if BOOST_FUSION_N
+        typename
+#endif
+        result_of::zip<
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+        >::type
+    zip(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
+    {
+        return
+#if BOOST_FUSION_N
+            typename
+#endif
+            result_of::zip<
+                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+            >::type(fusion::vector_tie(EXPAND_PARAMETERS_A(BOOST_FUSION_N)));
+    }
+
+#undef BOOST_FUSION_N
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -35,7 +35,8 @@
     inline typename result_of::remove<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type
     remove(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
-        return remove_if<is_same<mpl::_1, T> >(BOOST_FUSION_FORWARD(Seq,seq));
+        return fusion::remove_if<is_same<mpl::_1, T> >(
+                        BOOST_FUSION_FORWARD(Seq,seq));
     }
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
@@ -44,7 +45,7 @@
             result_of::remove<,Seq,&, T>)
     remove_if(Seq& seq)
     {
-        return remove_if<is_same<mpl::_1, T> >(seq);
+        return fusion::remove_if<is_same<mpl::_1, T> >(seq);
     }
 #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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,12 +1,10 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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
-
 #include <boost/fusion/iterator/value_of.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/next.hpp>
@@ -23,46 +21,8 @@
     template <int Size>
     struct BOOST_PP_CAT(BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME),_impl);
 
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/as_seq.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/as_seq_n.hpp>
 #define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
 #include BOOST_PP_ITERATE()
 }}}
 
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
-    template <>
-    struct BOOST_PP_CAT(BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME),_impl)<
-        BOOST_FUSION_N
-    >
-    {
-        template <typename It0>
-        struct apply
-        {
-#if BOOST_FUSION_N
-            typedef typename result_of::value_of<It0>::type T0;
-#endif
-
-#define BOOST_FUSION_IT_VALUE_ENUM(Z, N, _)\
-            typedef typename\
-                result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
-            BOOST_PP_CAT(It, N);\
-            typedef typename\
-                result_of::value_of<BOOST_PP_CAT(It, N)>::type\
-            BOOST_PP_CAT(T, N);
-
-            BOOST_PP_REPEAT_FROM_TO(
-                    1, BOOST_FUSION_N, BOOST_FUSION_IT_VALUE_ENUM, _)
-
-#undef BOOST_FUSION_IT_VALUE_ENUM
-
-            typedef
-                BOOST_FUSION_SEQ_NAME<BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)>
-            type;
-        };
-    };
-
-#undef BOOST_FUSION_N
-
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    template <>
+    struct BOOST_PP_CAT(BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME),_impl)<
+        BOOST_FUSION_N
+    >
+    {
+        template <typename It0>
+        struct apply
+        {
+#if BOOST_FUSION_N
+            typedef typename result_of::value_of<It0>::type T0;
+#endif
+
+#define BOOST_FUSION_IT_VALUE_ENUM(Z, N, _)\
+            typedef typename\
+                result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
+            BOOST_PP_CAT(It, N);\
+            typedef typename\
+                result_of::value_of<BOOST_PP_CAT(It, N)>::type\
+            BOOST_PP_CAT(T, N);
+
+            BOOST_PP_REPEAT_FROM_TO(
+                    1, BOOST_FUSION_N, BOOST_FUSION_IT_VALUE_ENUM, _)
+
+#undef BOOST_FUSION_IT_VALUE_ENUM
+
+            typedef
+                BOOST_FUSION_SEQ_NAME<BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)>
+            type;
+        };
+    };
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,43 +1,23 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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()
+#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_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
+#   define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/forward_interface_n.hpp>
+#   define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
+#   include BOOST_PP_ITERATE()
 #endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#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
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,12 +1,11 @@
 /*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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_GENERATION_DETAIL_PP_MAKE_MAP_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_MAP_HPP
 
@@ -39,81 +38,10 @@
         struct make_map;
     }
     
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_map.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_map_n.hpp>
 #define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_MAP_SIZE)
 #include BOOST_PP_ITERATE()
 
 }}
 
 #endif
-#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
-    {
-        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
-#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,N,_)\
-            pair<\
-                BOOST_PP_CAT(K,N)\
-              , typename traits::deduce<BOOST_PP_CAT(T,N)>::type\
-            >
-
-            typedef
-                map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
-            type;
-
-#undef BOOST_FUSION_MAP_ELEMENT
-        };
-    }
-
-#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 BOOST_FUSION_N
-        typename
-#endif
-        result_of::make_map<
-            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
-            BOOST_FUSION_COMMA
-            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
-        >::type
-    make_map(
-        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
-    {
-        return
-#if BOOST_FUSION_N
-            typename
-#endif
-            result_of::make_map<
-                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_COMMA
-#undef BOOST_FUSION_N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,77 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+#if BOOST_FUSION_N
+#   define BOOST_FUSION_COMMA ,
+#else
+#   define BOOST_FUSION_COMMA
+#endif
+
+    namespace result_of
+    {
+        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
+#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,N,_)\
+            pair<\
+                BOOST_PP_CAT(K,N)\
+              , typename traits::deduce<BOOST_PP_CAT(T,N)>::type\
+            >
+
+            typedef
+                map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
+            type;
+
+#undef BOOST_FUSION_MAP_ELEMENT
+        };
+    }
+
+#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 BOOST_FUSION_N
+        typename
+#endif
+        result_of::make_map<
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+            BOOST_FUSION_COMMA
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+        >::type
+    make_map(
+        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
+    {
+        return
+#if BOOST_FUSION_N
+            typename
+#endif
+            result_of::make_map<
+                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_COMMA
+#undef BOOST_FUSION_N
+
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,12 +1,10 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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
-
 #include <boost/fusion/support/deduce.hpp>
 #include <boost/fusion/support/internal/template.hpp>
 
@@ -22,54 +20,7 @@
         struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()));
     }
 
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_seq.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_seq_n.hpp>
 #define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
 #include BOOST_PP_ITERATE()
 }}
-
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        VARIADIC_TEMPLATE(BOOST_FUSION_N)
-        struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))
-            EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
-                BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
-        {
-            typedef
-                BOOST_FUSION_SEQ_NAME(BOOST_FUSION_N)<
-                    EXPAND_TEMPLATE_ARGUMENTS_BINARY(
-                            BOOST_FUSION_N,
-                            typename traits::deduce<,
-                            >::type
-                    )
-                >
-            type;
-        };
-    }
-
-    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
-    inline
-#if BOOST_FUSION_N
-        typename
-#endif
-        result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))<
-            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
-        >::type
-    BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))(
-        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
-    {
-        return
-#if BOOST_FUSION_N
-            typename
-#endif
-            result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))<
-                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
-            >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
-    }
-
-#undef BOOST_FUSION_N
-
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,50 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        VARIADIC_TEMPLATE(BOOST_FUSION_N)
+        struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))
+            EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+                BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
+        {
+            typedef
+                BOOST_FUSION_SEQ_NAME(BOOST_FUSION_N)<
+                    EXPAND_TEMPLATE_ARGUMENTS_BINARY(
+                            BOOST_FUSION_N,
+                            typename traits::deduce<,
+                            >::type
+                    )
+                >
+            type;
+        };
+    }
+
+    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+    inline
+#if BOOST_FUSION_N
+        typename
+#endif
+        result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))<
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+        >::type
+    BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))(
+        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
+    {
+        return
+#if BOOST_FUSION_N
+            typename
+#endif
+            result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))<
+                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+            >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
+    }
+
+#undef BOOST_FUSION_N
+
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,13 +1,12 @@
 /*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
     Copyright (c) 2006 Dan Marsden
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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_GENERATION_DETAIL_PP_MAP_TIE_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAP_TIE_HPP
 
@@ -40,80 +39,10 @@
         struct map_tie;
     }
     
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/map_tie.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/map_tie_n.hpp>
 #define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_MAP_SIZE)
 #include BOOST_PP_ITERATE()
 
 }}
 
 #endif
-#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
-    {
-        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
-#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,N,_)\
-            pair<\
-                BOOST_PP_CAT(K,N)\
-              , typename detail::deduce_ref<BOOST_PP_CAT(T,N)>::type\
-            >
-
-            typedef
-                map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
-            type;
-
-#undef BOOST_FUSION_MAP_ELEMENT
-        };
-    }
-
-#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 BOOST_FUSION_N
-        typename
-#endif
-        result_of::map_tie<
-            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
-            BOOST_FUSION_COMMA
-            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
-        >::type
-    map_tie(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
-    {
-        return
-#if BOOST_FUSION_N
-            typename
-#endif
-            result_of::map_tie<
-                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_COMMA
-#undef BOOST_FUSION_N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,76 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+#if BOOST_FUSION_N
+#   define BOOST_FUSION_COMMA ,
+#else
+#   define BOOST_FUSION_COMMA
+#endif
+
+    namespace result_of
+    {
+        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
+#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,N,_)\
+            pair<\
+                BOOST_PP_CAT(K,N)\
+              , typename detail::deduce_ref<BOOST_PP_CAT(T,N)>::type\
+            >
+
+            typedef
+                map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
+            type;
+
+#undef BOOST_FUSION_MAP_ELEMENT
+        };
+    }
+
+#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 BOOST_FUSION_N
+        typename
+#endif
+        result_of::map_tie<
+            BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+            BOOST_FUSION_COMMA
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
+        >::type
+    map_tie(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
+    {
+        return
+#if BOOST_FUSION_N
+            typename
+#endif
+            result_of::map_tie<
+                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_COMMA
+#undef BOOST_FUSION_N
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,12 +1,10 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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
-
 #include <boost/fusion/support/deduce.hpp>
 #include <boost/fusion/support/internal/template.hpp>
 
@@ -21,54 +19,9 @@
         struct BOOST_FUSION_FUNCTION_NAME;
     }
 
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/seq_tie.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/seq_tie_n.hpp>
 #define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
 #include BOOST_PP_ITERATE()
 
 }}
 
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        VARIADIC_TEMPLATE(BOOST_FUSION_N)
-        struct BOOST_FUSION_FUNCTION_NAME
-            EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
-                    BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
-        {
-            typedef
-                BOOST_FUSION_SEQ_NAME(BOOST_FUSION_N)<
-                    EXPAND_TEMPLATE_ARGUMENTS_BINARY(
-                            BOOST_FUSION_N,
-                            typename detail::deduce_ref<,
-                            >::type
-                    )
-                >
-            type;
-        };
-    }
-
-    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
-    inline
-#if BOOST_FUSION_N
-        typename
-#endif
-        result_of::BOOST_FUSION_FUNCTION_NAME<
-            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
-        >::type
-    BOOST_FUSION_FUNCTION_NAME(
-        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
-    {
-        return
-#if BOOST_FUSION_N
-            typename
-#endif
-            result_of::BOOST_FUSION_FUNCTION_NAME<
-                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
-            >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
-    }
-
-#undef N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,50 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        VARIADIC_TEMPLATE(BOOST_FUSION_N)
+        struct BOOST_FUSION_FUNCTION_NAME
+            EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+                    BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
+        {
+            typedef
+                BOOST_FUSION_SEQ_NAME(BOOST_FUSION_N)<
+                    EXPAND_TEMPLATE_ARGUMENTS_BINARY(
+                            BOOST_FUSION_N,
+                            typename detail::deduce_ref<,
+                            >::type
+                    )
+                >
+            type;
+        };
+    }
+
+    VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+    inline
+#if BOOST_FUSION_N
+        typename
+#endif
+        result_of::BOOST_FUSION_FUNCTION_NAME<
+            EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
+        >::type
+    BOOST_FUSION_FUNCTION_NAME(
+        EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
+    {
+        return
+#if BOOST_FUSION_N
+            typename
+#endif
+            result_of::BOOST_FUSION_FUNCTION_NAME<
+                EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
+            >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
+    }
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_map.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_map.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -69,7 +69,6 @@
         };
     }
 
-    //TODO cschmidt: ?!
     template <typename... Keys, typename... Types>
     inline typename
         result_of::make_map<Keys...,BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -72,7 +72,6 @@
         };
     }
 
-    //TODO cschmidt: ?!
     template <typename... Keys, typename... Types>
     inline typename
         result_of::map_tie<Keys...,BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,54 +1,25 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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
 
-#   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>
+#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_FILENAME_1 <boost/fusion/container/list/detail/pp/cons_gen_n.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/cons_gen_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#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
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,46 +1,11 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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()
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/list/detail/pp/list_forward_ctor_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_LIST_SIZE)
+#include BOOST_PP_ITERATE()
 
-#   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/pp/list_forward_ctor_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,40 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#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
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,59 +1,42 @@
 /*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2009-2010 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_VECTOR_DETAIL_PP_VECTOR_N_CHOOSER_HPP
-#   define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_N_CHOOSER_HPP
+#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_N_CHOOSER_HPP
+#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_N_CHOOSER_HPP
 
-#   include <boost/fusion/container/vector/limits.hpp>
+#include <boost/fusion/container/vector/limits.hpp>
 //  include vector0..N where N is FUSION_MAX_VECTOR_SIZE
-#   include <boost/fusion/container/vector/vector10.hpp>
-#   if (FUSION_MAX_VECTOR_SIZE > 10)
-#       include <boost/fusion/container/vector/vector20.hpp>
-#   endif
-#   if (FUSION_MAX_VECTOR_SIZE > 20)
-#       include <boost/fusion/container/vector/vector30.hpp>
-#   endif
-#   if (FUSION_MAX_VECTOR_SIZE > 30)
-#       include <boost/fusion/container/vector/vector40.hpp>
-#   endif
-#   if (FUSION_MAX_VECTOR_SIZE > 40)
-#       include <boost/fusion/container/vector/vector50.hpp>
-#   endif
-#   include <boost/fusion/support/internal/template.hpp>
+#include <boost/fusion/container/vector/vector10.hpp>
+#if (FUSION_MAX_VECTOR_SIZE > 10)
+#    include <boost/fusion/container/vector/vector20.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 20)
+#   include <boost/fusion/container/vector/vector30.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 30)
+#    include <boost/fusion/container/vector/vector40.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 40)
+#    include <boost/fusion/container/vector/vector50.hpp>
+#endif
+#include <boost/fusion/support/internal/template.hpp>
 
-#   include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/cat.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
     VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_VECTOR_SIZE)
     struct vector_n_chooser;
 
-#   define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp>
-#   define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_VECTOR_SIZE)
-#   include BOOST_PP_ITERATE()
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/pp/vector_n_chooser_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_VECTOR_SIZE)
+#include BOOST_PP_ITERATE()
 
 }}}
 
-#   endif
-#else
-#   define BOOST_FUSION_N BOOST_PP_ITERATION()
-
-    VARIADIC_TEMPLATE(BOOST_FUSION_N)
-    struct vector_n_chooser
-        EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
-            FUSION_MAX_VECTOR_SIZE,BOOST_FUSION_N)
-    {
-        typedef
-            BOOST_PP_CAT(vector, BOOST_FUSION_N)<
-                EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
-            >
-        type;
-    };
-
-#   undef BOOST_FUSION_N
 #endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    VARIADIC_TEMPLATE(BOOST_FUSION_N)
+    struct vector_n_chooser
+        EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+            FUSION_MAX_VECTOR_SIZE,BOOST_FUSION_N)
+    {
+        typedef
+            BOOST_PP_CAT(vector, BOOST_FUSION_N)<
+                EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
+            >
+        type;
+    };
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_n.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_n.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -91,6 +91,6 @@
     };
 }}
 
-    #undef N
+    #undef BOOST_FUSION_N
 #endif
 
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/fused_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/fused_impl.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,125 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#include <boost/fusion/support/internal/assert.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/type_traits/add_const.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/call_traits.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+    template<typename F>
+    struct BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)
+    {
+        template<typename Sig>
+        struct result;
+
+        template<class Self, class Seq>
+        struct result<Self(Seq)>
+          : result_of::BOOST_PP_CAT(invoke,BOOST_FUSION_ADAPTER_POSTFIX)<
+                typename detail::forward_as<Self,F>::type
+              , Seq
+            >
+        {};
+
+        BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)()
+          : f()
+        {}
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+        BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)(
+            typename call_traits<F>::param_type f)
+          : f(f)
+        {}
+#else
+        template<typename... Args>
+        BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)(
+            BOOST_FUSION_R_ELSE_CLREF(Args)... args)
+          : f(BOOST_FUSION_FORWARD(Args,args)...)
+        {}
+
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+        template<typename... Args>
+        BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)(Args&... args)
+          : f(args...)
+        {}
+#   endif
+#endif
+
+#define BOOST_FUSION_CTOR_SPECIALIZATION(MODIFIER,_)\
+        BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)(\
+            BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX) MODIFIER adapter)\
+          : f(static_cast<\
+                BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX) MODIFIER\
+            >(adapter).f)\
+        {}
+
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_CTOR_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_CTOR_SPECIALIZATION
+
+        template<typename OtherF>
+        BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)&
+        operator=(BOOST_FUSION_RREF_ELSE_OBJ(OtherF) other_f)
+        {
+            f=BOOST_FUSION_FORWARD(OtherF, other_f);
+            return *this;
+        }
+
+#define BOOST_FUSION_ASSIGN_SPECIALIZATION(MODIFIER,_)\
+        BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)&\
+        operator=(BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX) MODIFIER\
+            other_adapter)\
+        {\
+            f=static_cast<\
+                BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX) MODIFIER\
+            >(other_adapter).f;\
+            return *this;\
+        }
+
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_ASSIGN_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_ASSIGN_SPECIALIZATION
+
+#define BOOST_FUSION_CALL_OPERATOR(F, SEQ_MODIFIER, MODIFIER)\
+        template<typename Seq>\
+        typename result_of::BOOST_PP_CAT(invoke,BOOST_FUSION_ADAPTER_POSTFIX)<\
+            F\
+          , Seq SEQ_MODIFIER\
+        >::type\
+        operator()(Seq SEQ_MODIFIER seq) MODIFIER\
+        {\
+            /*BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));*/\
+            BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));\
+            \
+            return fusion::BOOST_PP_CAT(invoke,BOOST_FUSION_ADAPTER_POSTFIX)<F>(\
+                            f,\
+                            static_cast<Seq SEQ_MODIFIER>(seq));\
+        }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        BOOST_FUSION_CALL_OPERATOR(F,&,BOOST_PP_EMPTY());
+        BOOST_FUSION_CALL_OPERATOR(F,const&,BOOST_PP_EMPTY());
+        BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,&,const);
+        BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const&,const);
+#else
+        BOOST_FUSION_CALL_OPERATOR(F,&&,BOOST_PP_EMPTY());
+        BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,&&,const);
+#endif
+
+#undef BOOST_FUSION_CALL_OPERATOR
+
+        F f;
+    };
+}}
+
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_invocation_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_invocation_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,50 @@
+/*=============================================================================
+    Copyright (c) 2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+        template<
+            typename Self
+#if BOOST_FUSION_N > 0
+          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
+#endif
+        >
+        struct result<Self(EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N))>
+          : boost::result_of<
+                typename detail::get_func_base<
+                    typename detail::forward_as<Self,F>::type
+                >::type(BOOST_FUSION_R_ELSE_LREF(
+                    BOOST_PP_IF(BOOST_FUSION_N, typename, BOOST_PP_EMPTY())
+                    result_of::vector_tie<
+                        EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
+                    >::type))
+            >
+        {};
+
+#define BOOST_FUSION_CALL_OPERATOR(F,MODIFIER)\
+        VARIADIC_TEMPLATE_A(BOOST_FUSION_N)\
+        typename boost::result_of<\
+            typename detail::get_func_base<F>::type(\
+                BOOST_FUSION_R_ELSE_LREF(\
+                    BOOST_PP_IF(BOOST_FUSION_N, typename, BOOST_PP_EMPTY())\
+                    result_of::vector_tie<\
+                    EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)\
+                >::type))\
+        >::type\
+        operator()(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(\
+            BOOST_FUSION_N)) MODIFIER\
+        {\
+            return f(fusion::vector_tie(EXPAND_PARAMETERS_A(BOOST_FUSION_N)));\
+        }
+
+    BOOST_FUSION_CALL_OPERATOR(F,BOOST_PP_EMPTY());
+    BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const);
+
+#undef BOOST_FUSION_CALL_OPERATOR
+
+#undef BOOST_FUSION_N
+
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_typed_impl_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_typed_impl_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,77 @@
+/*=============================================================================
+    Copyright (c) 2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    template<typename F, typename TransformSeq>
+    struct unfused_typed_impl<BOOST_FUSION_N, F, TransformSeq>
+    {
+        typedef typename
+            result_of::as_vector<BOOST_FUSION_R_ELSE_CLREF(TransformSeq)>::type
+        transformed_args;
+        typedef BOOST_FUSION_R_ELSE_LREF(transformed_args) transformed_args_arg;
+
+        template<typename Sig>
+        struct result;
+
+        template<
+            typename Self
+#if BOOST_FUSION_N > 0
+          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
+#endif
+        >
+        struct result<Self(EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N))>
+          : boost::result_of<
+                typename detail::get_func_base<
+                    typename detail::forward_as<Self,F>::type
+                >::type(transformed_args_arg)
+            >
+        {};
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+#   define BOOST_FUSION_CALL_PARAMETER(Z,N,__)\
+    typename call_traits<\
+        typename result_of::value_at_c<transformed_args,N>::type\
+    >::param_type BOOST_PP_CAT(_,N)
+
+#   define BOOST_FUSION_CALL_OPERATOR(F_,MODIFIER)\
+        typename boost::result_of<\
+            typename detail::get_func_base<F_>::type(transformed_args_arg)\
+        >::type\
+        operator()(BOOST_PP_ENUM(BOOST_FUSION_N,BOOST_FUSION_CALL_PARAMETER,_))\
+            MODIFIER\
+        {\
+            return static_cast<unfused_typed<F,TransformSeq> MODIFIER&>(*this).\
+                f(fusion::as_vector(TransformSeq(\
+                    EXPAND_PARAMETERS_A(BOOST_FUSION_N))));\
+        }
+#else
+#   define BOOST_FUSION_CALL_OPERATOR(F_,MODIFIER)\
+        BOOST_FUSION_VARIADIC_TEMPLATES_A(BOOST_FUSION_N)\
+        typename boost::result_of<\
+            typename detail::get_func_base<F_>::type(transformed_args_arg)\
+        >::type\
+        operator()(EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N))\
+            MODIFIER\
+        {\
+            return static_cast<unfused_typed<F,TransformSeq> MODIFIER&>(*this).\
+                f(fusion::as_vector(TransformSeq(\
+                    EXPAND_PARAMETERS_A(BOOST_FUSION_N))));\
+        }
+#endif
+
+        BOOST_FUSION_CALL_OPERATOR(F,BOOST_PP_EMPTY());
+        BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const);
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+#   undef BOOST_FUSION_CALL_PARAMETER
+#endif
+#undef BOOST_FUSION_CALL_OPERATOR
+    };
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 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)
@@ -8,13 +9,10 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_HPP
 #define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-#   include <boost/fusion/functional/adapter/detail/no_0x/fused.hpp>
-#else
-#   define BOOST_FUSION_ADAPTER_NAME fused
-#   include <boost/fusion/functional/adapter/detail/0x/fused_impl.hpp>
-#   undef BOOST_FUSION_ADAPTER_NAME
-#endif
+#include <boost/fusion/functional/invocation/invoke.hpp>
+
+#define BOOST_FUSION_ADAPTER_POSTFIX
+#include <boost/fusion/functional/adapter/detail/fused_impl.hpp>
+#undef BOOST_FUSION_ADAPTER_POSTFIX
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_function_object.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_function_object.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_function_object.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 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)
@@ -8,13 +9,10 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_FUNCTION_OBJECT_HPP
 #define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_FUNCTION_OBJECT_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-#   include <boost/fusion/functional/adapter/detail/no_0x/fused_function_object.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-#   define BOOST_FUSION_ADAPTER_NAME fused_function_object
-#   include <boost/fusion/functional/adapter/detail/0x/fused_impl.hpp>
-#   undef BOOST_FUSION_ADAPTER_NAME
-#endif
+#include <boost/fusion/functional/invocation/invoke_function_object.hpp>
+
+#define BOOST_FUSION_ADAPTER_POSTFIX _function_object
+#include <boost/fusion/functional/adapter/detail/fused_impl.hpp>
+#undef BOOST_FUSION_ADAPTER_POSTFIX
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_procedure.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_procedure.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_procedure.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 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)
@@ -8,13 +9,10 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_PROCEDURE_HPP
 #define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_PROCEDURE_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-#   include <boost/fusion/functional/adapter/detail/no_0x/fused_procedure.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-#   define BOOST_FUSION_ADAPTER_NAME fused_procedure
-#   include <boost/fusion/functional/adapter/detail/0x/fused_impl.hpp>
-#   undef BOOST_FUSION_ADAPTER_NAME
-#endif
+#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
+
+#define BOOST_FUSION_ADAPTER_POSTFIX _procedure
+#include <boost/fusion/functional/adapter/detail/fused_impl.hpp>
+#undef BOOST_FUSION_ADAPTER_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/limits.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/limits.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/limits.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
 /*=============================================================================
     Copyright (c) 2006-2007 Tobias Schwinger
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 Christopher Schmidt
   
     Use modification and distribution are subject to the Boost Software 
     License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -12,7 +12,7 @@
 
 #include <boost/config.hpp>
 
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
 #   include <boost/fusion/container/vector/limits.hpp>
 
 #   ifndef BOOST_FUSION_UNFUSED_MAX_ARITY
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 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)
@@ -9,10 +10,118 @@
 #define BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_HPP
 
 #include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-#   include <boost/fusion/functional/adapter/detail/no_0x/unfused.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-#   include <boost/fusion/functional/adapter/detail/0x/unfused_impl.hpp>
+#include <boost/fusion/container/generation/vector_tie.hpp>
+#include <boost/fusion/functional/adapter/limits.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/support/internal/template.hpp>
+#   include <boost/preprocessor/iterate.hpp>
 #endif
+#include <boost/preprocessor/empty.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace fusion
+{
+    template<
+        typename F
+        //TODO remove?
+      , bool=true
+    >
+    struct unfused
+    {
+        template<typename Sig>
+        struct result;
+
+#ifndef BOOST_NO_VARIADIC_TEMPLATES
+        template<typename Self, typename... Args>
+        struct result<Self(Args...)>
+          : boost::result_of<
+              typename detail::get_func_base<
+                  typename detail::forward_as<Self,F>::type
+               >::type(BOOST_FUSION_R_ELSE_LREF(
+                   typename result_of::vector_tie<Args...>::type))
+          >
+        {};
+#endif
+
+        unfused()
+          : f()
+        {}
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+        unfused(typename call_traits<F>::param_type f)
+          : f(f)
+        {}
+#else
+        template<typename... Args>
+        unfused(BOOST_FUSION_R_ELSE_CLREF(Args)... args)
+          : f(BOOST_FUSION_FORWARD(Args,args)...)
+        {}
+
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+        template<typename... Args>
+        unfused(Args&... args)
+          : f(args...)
+        {}
+#   endif
+#endif
+
+#define BOOST_FUSION_CTOR_SPECIALIZATION(MODIFIER,_)\
+        unfused(unfused MODIFIER adapter)\
+          : f(static_cast<unfused MODIFIER>(adapter).f)\
+        {}
+
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_CTOR_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_CTOR_SPECIALIZATION
+
+        template<typename OtherF>
+        unfused&
+        operator=(BOOST_FUSION_RREF_ELSE_OBJ(OtherF) other_f)
+        {
+            f=BOOST_FUSION_FORWARD(OtherF,other_f);
+            return *this;
+        }
+
+#define BOOST_FUSION_ASSIGN_SPECIALIZATION(MODIFIER,_)\
+        unfused&\
+        operator=(unfused MODIFIER other_adapter)\
+        {\
+            f=static_cast<unfused MODIFIER>(other_adapter).f;\
+            return *this;\
+        }
+
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_ASSIGN_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_ASSIGN_SPECIALIZATION
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   define BOOST_PP_FILENAME_1 <boost/fusion/functional/adapter/detail/pp/unfused_invocation_n.hpp>
+#   define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_UNFUSED_MAX_ARITY)
+#   include BOOST_PP_ITERATE()
+#else
+#   define BOOST_FUSION_CALL_OPERATOR(F,MODIFIER)\
+        template<typename... Args>\
+        typename boost::result_of<\
+            typename detail::get_func_base<F>::type(\
+                BOOST_FUSION_R_ELSE_LREF(typename result_of::vector_tie<\
+                    BOOST_FUSION_R_ELSE_LREF(Args)...\
+                >::type))\
+        >::type\
+        operator()(BOOST_FUSION_R_ELSE_LREF(Args)... args) MODIFIER\
+        {\
+            return f(fusion::vector_tie(BOOST_FUSION_FORWARD(Args,args)...));\
+        }
+
+        BOOST_FUSION_CALL_OPERATOR(F,BOOST_PP_EMPTY());
+        BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const);
+
+#   undef BOOST_FUSION_CALL_OPERATOR
+#endif
+
+        F f;
+    };
+}}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused_typed.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused_typed.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused_typed.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 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)
@@ -9,12 +10,146 @@
 #define BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_TYPED_HPP
 
 #include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-#   include <boost/fusion/functional/adapter/detail/no_0x/unfused_typed.hpp>
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
+#   include <boost/fusion/sequence/intrinsic/size.hpp>
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+#       include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#   endif
+#endif
+#include <boost/fusion/container/vector/convert.hpp>
+#include <boost/fusion/functional/adapter/limits.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/fusion/support/internal/template.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#endif
+#include <boost/preprocessor/empty.hpp>
+#include <boost/type_traits/add_const.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/call_traits.hpp>
+#endif
+
+//TODO cschmidt: tagged variadic, non-rvalue implementation
+
+namespace boost { namespace fusion
+{
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
+    template<typename F, typename TransformSeq>
+    struct unfused_typed;
+
+    namespace detail
+    {
+        template<int SeqSize, typename F, typename TransformSeq>
+        struct unfused_typed_impl;
+
+#   define BOOST_PP_FILENAME_1 <boost/fusion/functional/adapter/detail/pp/unfused_typed_impl_n.hpp>
+#   define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_UNFUSED_TYPED_MAX_ARITY)
+#   include BOOST_PP_ITERATE()
+    }
+#endif
+
+    template<typename F, typename TransformSeq>
+    struct unfused_typed
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
+      : detail::unfused_typed_impl<
+            result_of::size<TransformSeq>::value
+          , F
+          , TransformSeq
+        >
+#endif
+    {
+#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_NO_RVALUE_REFERENCES)
+        typedef typename
+            result_of::as_vector<BOOST_FUSION_R_ELSE_CLREF(TransformSeq)>::type
+        transformed_args;
+
+        template<typename Sig>
+        struct result;
+
+        template<typename Self, typename... Args>
+        struct result<Self(Args...)>
+          : boost::result_of<
+                typename detail::get_func_base<
+                    typename detail::forward_as<Self,F>::type
+                >::type(transformed_args&&)
+            >
+        {};
+#endif
+
+        unfused_typed()
+          : f()
+        {}
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+        unfused_typed(typename call_traits<F>::param_type f)
+          : f(f)
+        {}
 #else
-#   define BOOST_FUSION_TYPED
-#   include <boost/fusion/functional/adapter/detail/0x/unfused_impl.hpp>
-#   undef BOOST_FUSION_TYPED
+        template<typename... Args>
+        unfused_typed(BOOST_FUSION_R_ELSE_CLREF(Args)... args)
+          : f(BOOST_FUSION_FORWARD(Args,args)...)
+        {}
+
+#   ifdef BOOST_NO_RVALUE_REFERENCES
+        template<typename... Args>
+        unfused_typed(Args&... args)
+          : f(args...)
+        {}
+#   endif
+#endif
+
+#define BOOST_FUSION_CTOR_SPECIALIZATION(MODIFIER,_)\
+        unfused_typed(unfused_typed MODIFIER adapter)\
+          : f(static_cast<unfused_typed MODIFIER>(adapter).f)\
+        {}
+
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_CTOR_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_CTOR_SPECIALIZATION
+
+        template<typename OtherF>
+        unfused_typed&
+        operator=(BOOST_FUSION_RREF_ELSE_OBJ(OtherF) other_f)
+        {
+            f=BOOST_FUSION_FORWARD(OtherF,other_f);
+            return *this;
+        }
+
+#define BOOST_FUSION_ASSIGN_SPECIALIZATION(MODIFIER,_)\
+        unfused_typed&\
+        operator=(unfused_typed MODIFIER other_adapter)\
+        {\
+            f=static_cast<unfused_typed MODIFIER>(other_adapter).f;\
+            return *this;\
+        }
+
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_ASSIGN_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_ASSIGN_SPECIALIZATION
+
+#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_NO_RVALUE_REFERENCES)
+#   define BOOST_FUSION_CALL_OPERATOR(F,MODIFIER)\
+        template<typename... Args>\
+        typename boost::result_of<\
+            typename detail::get_func_base<F>::type(transformed_args&&)\
+        >::type\
+        operator()(Args&&... args) MODIFIER\
+        {\
+            return f(fusion::as_vector(\
+                TransformSeq(std::forward<Args>(args)...)));\
+        }
+
+        BOOST_FUSION_CALL_OPERATOR(F,BOOST_PP_EMPTY());
+        BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const);
+
+#   undef BOOST_FUSION_CALL_OPERATOR
 #endif
 
+        F f;
+    };
+}}
+
+#undef BOOST_FUSION_ADAPTER_NAME
+
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
 /*=============================================================================
     Copyright (c) 2007 Tobias Schwinger
-  
+
     Use modification and distribution are subject to 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).
@@ -11,7 +11,7 @@
 
 #include <boost/preprocessor/cat.hpp>
 
-#define BOOST_FUSION_FUNC_NAME BOOST_PP_CAT(make_,BOOST_FUSION_CLASS_TPL_NAME)
+#define BOOST_FUSION_FUNC_NAME BOOST_PP_CAT(make_,BOOST_FUSION_FUSED_CLASS_NAME)
 
 namespace boost { namespace fusion
 {
@@ -21,7 +21,7 @@
         struct BOOST_FUSION_FUNC_NAME
         {
             typedef
-                BOOST_FUSION_CLASS_TPL_NAME<
+                BOOST_FUSION_FUSED_CLASS_NAME<
                     typename traits::deduce<F>::type
                 >
             type;
@@ -39,5 +39,5 @@
     }
 }}
 
-#undef BOOST_FUSION_CLASS_TPL_NAME
+#undef BOOST_FUSION_FUSED_CLASS_NAME
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
 /*=============================================================================
     Copyright (c) 2007 Tobias Schwinger
-  
+
     Use modification and distribution are subject to 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).
@@ -9,13 +9,10 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_HPP
 #define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
-#   include <boost/fusion/functional/adapter/fused.hpp>
+#include <boost/fusion/functional/adapter/fused.hpp>
 
-#   define BOOST_FUSION_CLASS_TPL_NAME fused
-#   include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
-#   undef BOOST_FUSION_CLASS_TPL_NAME
-#endif
+#define BOOST_FUSION_FUSED_CLASS_NAME fused
+#include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
+#undef BOOST_FUSION_FUSED_CLASS_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_function_object.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_function_object.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_function_object.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
 /*=============================================================================
     Copyright (c) 2007 Tobias Schwinger
-  
+
     Use modification and distribution are subject to 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).
@@ -9,13 +9,10 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_FUNCTION_OBJECT_HPP
 #define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_FUNCTION_OBJECT_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
-#   include <boost/fusion/functional/adapter/fused_function_object.hpp>
+#include <boost/fusion/functional/adapter/fused_function_object.hpp>
 
-#   define BOOST_FUSION_CLASS_TPL_NAME fused_function_object
-#   include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
-#   undef BOOST_FUSION_CLASS_TPL_NAME
-#endif
+#define BOOST_FUSION_FUSED_CLASS_NAME fused_function_object
+#include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
+#undef BOOST_FUSION_FUSED_CLASS_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_procedure.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_procedure.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_procedure.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
 /*=============================================================================
     Copyright (c) 2007 Tobias Schwinger
-  
+
     Use modification and distribution are subject to 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).
@@ -9,13 +9,10 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_PROCEDURE_HPP
 #define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_PROCEDURE_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
-#   include <boost/fusion/functional/adapter/fused_procedure.hpp>
+#include <boost/fusion/functional/adapter/fused_procedure.hpp>
 
-#   define BOOST_FUSION_CLASS_TPL_NAME fused_procedure
-#   include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
-#   undef BOOST_FUSION_CLASS_TPL_NAME
-#endif
+#define BOOST_FUSION_FUSED_CLASS_NAME fused_procedure
+#include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
+#undef BOOST_FUSION_FUSED_CLASS_NAME
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_unfused.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_unfused.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_unfused.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
 /*=============================================================================
     Copyright (c) 2007 Tobias Schwinger
-  
+
     Use modification and distribution are subject to 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).
@@ -9,13 +9,10 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_UNFUSED_HPP
 #define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_UNFUSED_HPP
 
-#include <boost/config.hpp>
-#   if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
-#   include <boost/fusion/functional/adapter/unfused.hpp>
+#include <boost/fusion/functional/adapter/unfused.hpp>
 
-#   define BOOST_FUSION_CLASS_TPL_NAME unfused
-#   include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
-#   undef BOOST_FUSION_CLASS_TPL_NAME
-#endif
+#define BOOST_FUSION_FUSED_CLASS_NAME unfused
+#include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
+#undef BOOST_FUSION_FUSED_CLASS_NAME
 
 #endif
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,62 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/assert.hpp>
+
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
+#   include <boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp>
+#else
+#   include <boost/fusion/functional/invocation/detail/variadic_templates/invoke_impl.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+    namespace result_of
+    {
+        template<typename F, typename Seq>
+        struct BOOST_FUSION_INVOKE_NAME
+          : detail::BOOST_FUSION_INVOKE_NAME<
+#ifdef BOOST_NO_RVALUE_REFERENCES
+                typename traits::deduce<F>::type
+#else
+                typename traits::deduce_ref<F>::type
+#endif
+              , typename detail::add_lref<Seq>::type
+            >
+        {
+            BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+            BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+        };
+    }
+
+    template <typename F, typename Seq>
+    inline typename result_of::BOOST_FUSION_INVOKE_NAME<
+        BOOST_FUSION_RREF_ELSE_OBJ(F)
+      , BOOST_FUSION_R_ELSE_CLREF(Seq)
+    >::type
+    BOOST_FUSION_INVOKE_NAME(
+        BOOST_FUSION_RREF_ELSE_OBJ(F) f,
+        BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+    {
+        return result_of::BOOST_FUSION_INVOKE_NAME<
+            BOOST_FUSION_RREF_ELSE_OBJ(F)
+          , BOOST_FUSION_R_ELSE_CLREF(Seq)
+        >::call(f,seq);
+    }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template <typename F, typename Seq>
+    inline typename result_of::BOOST_FUSION_INVOKE_NAME<F,Seq&>::type
+    BOOST_FUSION_INVOKE_NAME(F f,Seq& seq)
+    {
+        return result_of::BOOST_FUSION_INVOKE_NAME<F,Seq&>::call(f,seq);
+    }
+#endif
+}}
+
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,120 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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_FUNCTIONAL_INVOCATION_DETAIL_MEMBER_OBJECT_POINTER_HELPER_HPP
+#define BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_MEMBER_OBJECT_POINTER_HELPER_HPP
+
+#include <boost/fusion/sequence/intrinsic/front.hpp>
+#include <boost/fusion/functional/invocation/detail/that_ptr.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    template<typename>
+    struct split_object_pointer;
+
+    template<class Type,class Class>
+    struct split_object_pointer<Type(Class::*)>
+    {
+        typedef Type type;
+        typedef Class class_type;
+    };
+
+    template<class Type,class Class>
+    struct split_object_pointer<Type(Class::* const)>
+    {
+        typedef Type type;
+        typedef Class class_type;
+    };
+
+    template<class Type,class Class>
+    struct split_object_pointer<Type(Class::* volatile)>
+    {
+        typedef Type type;
+        typedef Class class_type;
+    };
+
+    template<class Type,class Class>
+    struct split_object_pointer<Type(Class::* const volatile)>
+    {
+        typedef Type type;
+        typedef Class class_type;
+    };
+
+    template<typename Instance, typename Sig>
+    struct get_object_pointer_result_type
+    {
+        typedef typename split_object_pointer<Sig>::type  object_type;
+        typedef typename split_object_pointer<Sig>::class_type class_type;
+        typedef typename
+            remove_reference<Instance>::type
+        nonref_class_instance;
+        typedef typename identity<Instance>::type identity_class_instance;
+
+        typedef typename
+            is_base_of<
+                class_type
+              , identity_class_instance
+            >::type
+        is_directly_convertible;
+
+        typedef typename
+            mpl::if_<
+                mpl::or_<
+                    is_const<object_type>
+                  , mpl::and_<
+                        is_directly_convertible
+                      , is_const<nonref_class_instance>
+                    >
+                  , mpl::and_<
+                        mpl::not_<is_directly_convertible>
+                      , const_pointee<Instance>
+                    >
+                >
+              , class_type const
+              , class_type
+            >::type
+        const_class_type;
+        typedef typename
+            mpl::if_<
+                mpl::or_<
+                    is_volatile<object_type>
+                  , mpl::and_<
+                        is_directly_convertible
+                      , is_volatile<nonref_class_instance>
+                    >
+                  , mpl::and_<
+                        mpl::not_<is_directly_convertible>
+                      , volatile_pointee<Instance>
+                    >
+                >
+              , const_class_type volatile
+              , const_class_type
+            >::type
+        cv_class_type;
+
+        typedef typename forward_as<cv_class_type, object_type>::type type;
+    };
+
+    template<typename Sig, typename SeqRef>
+    struct get_object_pointer_result_type_seq
+      : get_object_pointer_result_type<
+            typename result_of::front<SeqRef>::type
+          , Sig
+        >
+    {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,178 @@
+/*=============================================================================
+    Copyright (c) 2010 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)
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/sequence/intrinsic/at_c.hpp>
+#ifndef BOOST_FUSION_NO_MEMBER_PTR
+#   include <boost/fusion/sequence/intrinsic/front.hpp>
+#   include <boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp>
+#   include <boost/fusion/functional/invocation/detail/that_ptr.hpp>
+#endif
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#ifndef BOOST_FUSION_RETURN_VOID
+#   include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#   include <boost/preprocessor/facilities/intercept.hpp>
+#endif
+#ifndef BOOST_FUSION_NO_MEMBER_PTR
+#   include <boost/preprocessor/repetition/enum_shifted.hpp>
+#endif
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/is_member_object_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/utility/result_of.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+#ifndef BOOST_FUSION_NO_MEMBER_PTR
+    struct member_function_ptr;
+    struct member_object_ptr;
+#endif
+    struct function_object;
+
+    namespace random_access_impl
+    {
+#ifndef BOOST_FUSION_RETURN_VOID
+        template<int SeqSize, typename F, typename SeqRef>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME);
+#endif
+
+        template<
+            typename f_type
+          , int SeqSize
+          , typename F
+          , typename SeqRef
+          , typename Result
+        >
+        struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl);
+    }
+
+    namespace forward_impl
+    {
+#ifndef BOOST_FUSION_RETURN_VOID
+        template<int SeqSize, typename F, typename SeqRef>
+        struct BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME);
+#endif
+
+        template<
+            typename f_type
+          , int SeqSize
+          , typename F
+          , typename SeqRef
+          , typename Result
+        >
+        struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl);
+    }
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/functional/invocation/detail/pp/invoke_impl_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_INVOKE_IMPL_MAX_ARITY)
+#include BOOST_PP_ITERATE()
+
+    template<typename F, typename SeqRef>
+    struct BOOST_FUSION_INVOKE_NAME
+    {
+#ifdef BOOST_FUSION_RETURN_VOID
+        typedef void type;
+#else
+        typedef
+            mpl::eval_if<
+                traits::is_random_access<SeqRef>
+              , random_access_impl::
+                    BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+                    result_of::size<SeqRef>::value
+                  , F
+                  , SeqRef
+                >
+              , forward_impl::
+                    BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+                    result_of::size<SeqRef>::value
+                  , F
+                  , SeqRef
+                >
+            >
+        impl_type;
+        typedef typename detail::remove_reference<F>::type f;
+        typedef preevaluate<F> preevaluater;
+
+        typedef typename
+            mpl::eval_if<
+                typename preevaluater::is_preevaluable
+              , preevaluater
+#   ifndef BOOST_FUSION_NO_MEMBER_PTR
+              , mpl::eval_if<
+                    is_member_object_pointer<f>
+                  , get_object_pointer_result_type_seq<f, SeqRef>
+#   endif
+                  , impl_type
+#   ifndef BOOST_FUSION_NO_MEMBER_PTR
+                >
+#   endif
+            >::type
+        type;
+#endif
+
+        static type
+        call(F f_, SeqRef seq)
+        {
+#ifdef BOOST_FUSION_RETURN_VOID
+            typedef typename detail::remove_reference<F>::type f;
+#endif
+
+            typedef
+#ifdef BOOST_FUSION_NO_MEMBER_PTR
+                function_object
+#else
+                typename mpl::eval_if<
+                    is_member_function_pointer<f>
+                  , mpl::identity<member_function_ptr>
+                  , mpl::if_<
+                        is_member_object_pointer<f>
+                      , member_object_ptr
+                      , function_object
+                    >
+                >::type
+#endif
+            f_type;
+
+            return mpl::if_<
+                traits::is_random_access<SeqRef>
+              , random_access_impl::
+                    BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+                    f_type
+                  , result_of::size<SeqRef>::value
+                  , F
+                  , SeqRef
+                  , type
+                >
+              , forward_impl::
+                    BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+                    f_type
+                  , result_of::size<SeqRef>::value
+                  , F
+                  , SeqRef
+                  , type
+                >
+            >::type::call(f_, seq);
+        }
+    };
+}}}
+
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,243 @@
+/*=============================================================================
+    Copyright (c) 2010 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+namespace random_access_impl
+{
+#ifndef BOOST_FUSION_RETURN_VOID
+#   define BOOST_FUSION_RESULT_OF_AT_SEQ_N(Z,N,_)\
+    typename result_of::at_c<SeqRef,N>::type
+
+    template<typename F, typename SeqRef>
+    struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+        BOOST_FUSION_N
+      , F
+      , SeqRef>
+    {
+        typedef typename
+            boost::result_of<
+                typename get_func_base<F>::type(BOOST_PP_ENUM_1(
+                    BOOST_FUSION_N,BOOST_FUSION_RESULT_OF_AT_SEQ_N,_))
+            >::type
+        type;
+    };
+
+#   undef BOOST_FUSION_RESULT_OF_AT_SEQ_N
+#endif
+
+#define BOOST_FUSION_SEQ_AT_N(Z,N,_) fusion::at_c<N>(static_cast<SeqRef>(seq))
+
+    template<typename F, typename SeqRef, typename Result>
+    struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+        function_object
+      , BOOST_FUSION_N
+      , F
+      , SeqRef
+      , Result
+    >
+    {
+        static Result
+        call(F f, SeqRef seq)
+        {
+#ifndef BOOST_FUSION_RETURN_VOID
+            return
+#endif
+                f(BOOST_PP_ENUM_1(BOOST_FUSION_N,BOOST_FUSION_SEQ_AT_N,_));
+        }
+    };
+
+#if !defined(BOOST_FUSION_NO_MEMBER_PTR) && BOOST_FUSION_N>=1
+    template<typename F, typename SeqRef, typename Result>
+    struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+        member_function_ptr
+      , BOOST_FUSION_N
+      , F
+      , SeqRef
+      , Result
+    >
+    {
+        static Result
+        call(F f, SeqRef seq)
+        {
+#   ifndef BOOST_FUSION_RETURN_VOID
+            return
+#   endif
+                (that_ptr<typename preevaluate<F>::gen::class_type>::get(
+                    fusion::front(seq))->*f)(BOOST_PP_ENUM_SHIFTED_1(
+                        BOOST_FUSION_N,BOOST_FUSION_SEQ_AT_N,_));
+        }
+    };
+
+#   if BOOST_FUSION_N==1
+    template<typename F, typename SeqRef, typename Result>
+    struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+        member_object_ptr
+      , 1
+      , F
+      , SeqRef
+      , Result
+    >
+    {
+        static Result
+        call(F f, SeqRef seq)
+        {
+            typedef typename result_of::front<SeqRef>::type Instance;
+
+            return (that_ptr<
+                        typename get_object_pointer_result_type<
+                            Instance
+                          , typename remove_reference<F>::type
+                        >::cv_class_type&
+                    >::get(fusion::front(seq))->*f);
+        }
+    };
+#   endif
+#endif
+
+#undef BOOST_FUSION_SEQ_AT_N
+}
+
+namespace forward_impl
+{
+#ifndef BOOST_FUSION_RETURN_VOID
+    template<typename F, typename SeqRef>
+    struct BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+        BOOST_FUSION_N
+      , F
+      , SeqRef>
+    {
+#   if BOOST_FUSION_N
+        typedef typename result_of::begin<SeqRef>::type It0;
+
+#       if BOOST_FUSION_N > 1
+#       define BOOST_FUSION_IT_N(Z,N,_)\
+        typedef typename\
+            result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
+        BOOST_PP_CAT(It,N);\
+
+        BOOST_PP_REPEAT_FROM_TO_1(1, BOOST_FUSION_N, BOOST_FUSION_IT_N, _)
+
+#       undef BOOST_FUSION_IT_N
+#       endif
+#   endif
+
+        typedef typename
+            boost::result_of<
+                typename get_func_base<F>::type(
+                BOOST_PP_ENUM_BINARY_PARAMS_Z(
+                    1,
+                    BOOST_FUSION_N,
+                    typename result_of::deref<It,
+                    >::type BOOST_PP_INTERCEPT)
+                )
+            >::type
+        type;
+    };
+#endif
+
+
+#if BOOST_FUSION_N
+#   define BOOST_FUSION_IT_N(Z,N,_)\
+        typedef typename\
+            result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
+        BOOST_PP_CAT(It,N);\
+        BOOST_PP_CAT(It,N) BOOST_PP_CAT(it,N)=\
+            fusion::next(BOOST_PP_CAT(it, BOOST_PP_DEC(N)));
+
+#   define BOOST_FUSION_DEFINE_ITS()\
+        typedef typename result_of::begin<SeqRef>::type It0;\
+        It0 it0=fusion::begin(seq);\
+        \
+        BOOST_PP_REPEAT_FROM_TO(1, BOOST_FUSION_N, BOOST_FUSION_IT_N, _)
+
+#   define BOOST_FUSION_IT_DEREF_N(Z,N,_)\
+        fusion::deref(BOOST_PP_CAT(it,N))
+#else
+#   define BOOST_FUSION_DEFINE_ITS()
+#endif
+
+    template<typename F, typename SeqRef, typename Result>
+    struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+        function_object
+      , BOOST_FUSION_N
+      , F
+      , SeqRef
+      , Result
+    >
+    {
+        static Result
+        call(F f, SeqRef seq)
+        {
+            BOOST_FUSION_DEFINE_ITS()
+
+#ifndef BOOST_FUSION_RETURN_VOID
+            return
+#endif
+                f(BOOST_PP_ENUM_1(BOOST_FUSION_N,BOOST_FUSION_IT_DEREF_N,_));
+        }
+    };
+
+#if !defined(BOOST_FUSION_NO_MEMBER_PTR) && BOOST_FUSION_N>=1
+    template<typename F, typename SeqRef, typename Result>
+    struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+        member_function_ptr
+      , BOOST_FUSION_N
+      , F
+      , SeqRef
+      , Result
+    >
+    {
+        static Result
+        call(F f, SeqRef seq)
+        {
+            BOOST_FUSION_DEFINE_ITS()
+
+#   ifndef BOOST_FUSION_RETURN_VOID
+            return
+#   endif
+                (that_ptr<typename preevaluate<F>::gen::class_type>::get(
+                    fusion::deref(it0))->*f)(BOOST_PP_ENUM_SHIFTED_1(
+                        BOOST_FUSION_N,BOOST_FUSION_IT_DEREF_N,_));
+        }
+    };
+
+#   if BOOST_FUSION_N==1
+    template<typename F, typename SeqRef, typename Result>
+    struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+        member_object_ptr
+      , 1
+      , F
+      , SeqRef
+      , Result
+    >
+    {
+        static Result
+        call(F f, SeqRef seq)
+        {
+            typedef typename result_of::front<SeqRef>::type Instance;
+
+            return (that_ptr<
+                        typename get_object_pointer_result_type<
+                            Instance
+                          , typename remove_reference<F>::type
+                        >::cv_class_type&
+                    >::get(fusion::front(seq))->*f);
+        }
+    };
+#   endif
+#endif
+
+#if BOOST_FUSION_N
+#   undef BOOST_FUSION_IT_DEREF_N
+#   undef BOOST_FUSION_IT_N
+#endif
+#undef BOOST_FUSION_DEFINE_ITS
+}
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,7 @@
 /*=============================================================================
     Copyright (c) 2006-2007 Tobias Schwinger
-  
+    Copyright (c) 2009 Christopher Schmidt
+
     Use modification and distribution are subject to 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).
@@ -14,7 +15,6 @@
 
 #include <boost/mpl/bool.hpp>
 #include <boost/type_traits/config.hpp>
-#include <boost/type_traits/add_const.hpp>
 #include <boost/type_traits/add_volatile.hpp>
 #include <boost/get_pointer.hpp>
 #include <boost/utility/addressof.hpp>
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/variadic_templates/invoke_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/variadic_templates/invoke_impl.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,460 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 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)
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/advance_c.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#ifndef BOOST_FUSION_NO_MEMBER_PTR
+#   include <boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp>
+#   include <boost/fusion/functional/invocation/detail/that_ptr.hpp>
+#endif
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/is_member_object_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+#ifndef BOOST_FUSION_RETURN_VOID
+    template<typename F, typename... Args>
+    struct BOOST_PP_CAT(
+        BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+        _impl)
+      : boost::result_of<typename get_func_base<F>::type(Args...)>
+    {};
+#endif
+
+#ifdef BOOST_FUSION_NO_MEMBER_PTR
+    template<typename Result, typename F, typename...Args>
+    static Result
+    BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)(F&& f,Args&&...args)
+    {
+#   ifndef BOOST_FUSION_RETURN_VOID
+        return
+#   endif
+            f(BOOST_FUSION_FORWARD(Args,args)...);
+    }
+#else
+    template<typename Result, typename F, typename...Args>
+    static typename disable_if<
+        is_member_pointer<typename remove_reference<F>::type>
+      , Result
+    >::type
+    BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)(F&& f,Args&&...args)
+    {
+#   ifndef BOOST_FUSION_RETURN_VOID
+        return
+#   endif
+            f(std::forward<Args>(args)...);
+    }
+
+    template<typename Result, typename F,  typename Instance,typename...Args>
+    static typename enable_if<
+        is_member_function_pointer<typename remove_reference<F>::type>
+      , Result
+    >::type
+    BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)(
+                    F&& f,
+                    Instance&& instance,
+                    Args&&... args)
+    {
+#   ifndef BOOST_FUSION_RETURN_VOID
+        return
+#   endif
+            (that_ptr<typename preevaluate<F>::gen::class_type>::get(
+                instance)->*f)(std::forward<Args>(args)...);
+    }
+
+#   ifndef BOOST_FUSION_RETURN_VOID
+    template<typename Result, typename F,  typename Instance,typename...Args>
+    static typename enable_if<
+        is_member_object_pointer<typename remove_reference<F>::type>
+      , Result
+    >::type
+    BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)(
+                    F&& f,
+                    Instance&& instance,
+                    Args&&... args)
+    {
+        BOOST_FUSION_STATIC_ASSERT(!sizeof...(Args));
+
+        return (that_ptr<
+                    typename get_object_pointer_result_type<
+                        Instance&&
+                      , typename remove_reference<F>::type
+                    >::cv_class_type&
+                >::get(instance)->*f);
+    }
+#   endif
+#endif
+
+    namespace bidirectional_impl
+    {
+#ifndef BOOST_FUSION_RETURN_VOID
+        template<
+            int NumElementsLeft
+          , typename F
+          , typename It4
+          , typename...Args
+        >
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)
+        {
+            typedef typename result_of::prior<It4>::type It3;
+            typedef typename result_of::prior<It3>::type It2;
+            typedef typename result_of::prior<It2>::type It1;
+            typedef typename result_of::prior<It1>::type It0;
+
+            typedef typename
+                BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+                    NumElementsLeft-4
+                  , F
+                  , typename result_of::prior<It0>::type
+                  , typename result_of::deref<It0>::type
+                  , typename result_of::deref<It1>::type
+                  , typename result_of::deref<It2>::type
+                  , typename result_of::deref<It3>::type
+                  , Args...
+                >::type
+            type;
+        };
+
+        template<typename F, typename It3, typename...Args>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+            3
+          , F
+          , It3
+          , Args...
+        >
+        {
+            typedef typename result_of::prior<It3>::type It2;
+            typedef typename result_of::prior<It2>::type It1;
+
+            typedef typename
+                detail::BOOST_PP_CAT(
+                    BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+                    _impl)<
+                    F
+                  , typename result_of::deref<
+                        typename result_of::prior<It1>::type
+                    >::type
+                  , typename result_of::deref<It1>::type
+                  , typename result_of::deref<It2>::type
+                  , Args...
+                >::type
+            type;
+        };
+
+        template<typename F, typename It2, typename...Args>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+            2
+          , F
+          , It2
+          , Args...
+        >
+        {
+            typedef typename result_of::prior<It2>::type It1;
+
+            typedef typename
+                detail::BOOST_PP_CAT(
+                    BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+                    _impl)<
+                    F
+                  , typename result_of::deref<
+                        typename result_of::prior<It1>::type
+                    >::type
+                  , typename result_of::deref<It1>::type
+                  , Args...
+                >::type
+            type;
+        };
+
+        template<typename F, typename It1, typename...Args>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+            1
+          , F
+          , It1
+          , Args...
+        >
+        {
+            typedef typename
+                detail::BOOST_PP_CAT(
+                    BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+                    _impl)<
+                    F
+                  , typename result_of::deref<
+                        typename result_of::prior<It1>::type
+                    >::type
+                  , Args...
+                >::type
+            type;
+        };
+
+        template<typename F, typename It0, typename...Args>
+        struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+            0
+          , F
+          , It0
+          , Args...
+        >
+        {
+            typedef typename
+                detail::BOOST_PP_CAT(
+                    BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+                    _impl)<
+                    F
+                  , Args...
+                >::type
+            type;
+        };
+#endif
+
+        template<typename F, typename Result>
+        struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_INVOKE_NAME)
+        {
+            template<int NumElementsLeft,typename It4,typename...Args>
+            static Result
+            call(mpl::int_<NumElementsLeft>,
+                            F f,
+                            It4 const& it4,
+                            Args&&... args)
+            {
+                typedef typename result_of::prior<It4 const&>::type It3;
+                It3 it3 = fusion::prior(it4);
+                typedef typename result_of::prior<It3&>::type It2;
+                It2 it2 = fusion::prior(it3);
+                typedef typename result_of::prior<It2&>::type It1;
+                It1 it1 = fusion::prior(it2);
+                typedef typename result_of::prior<It1&>::type It0;
+                It0 it0 = fusion::prior(it1);
+
+                return call(
+                    mpl::int_<NumElementsLeft-4>(),
+                    f,
+                    it0,
+                    fusion::deref(it0),
+                    fusion::deref(it1),
+                    fusion::deref(it2),
+                    fusion::deref(it3),
+                    std::forward<Args>(args)...);
+            }
+
+            template<typename It3,typename...Args>
+            static Result
+            call(mpl::int_<3>,
+                            F f,
+                            It3 const& it3,
+                            Args&&... args)
+            {
+                typedef typename result_of::prior<It3 const&>::type It2;
+                It2 it2 = fusion::prior(it3);
+                typedef typename result_of::prior<It2&>::type It1;
+                It1 it1 = fusion::prior(it2);
+
+                return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+                    Result
+                >(static_cast<F>(f),
+                        fusion::deref(fusion::prior(it1)),
+                        fusion::deref(it1),
+                        fusion::deref(it2),
+                        std::forward<Args>(args)...);
+            }
+
+            template<typename It2,typename...Args>
+            static Result
+            call(mpl::int_<2>,
+                            F f,
+                            It2 const& it2,
+                            Args&&... args)
+            {
+                typedef typename result_of::prior<It2 const&>::type It1;
+                It1 it1 = fusion::prior(it2);
+
+                return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+                    Result
+                >(static_cast<F>(f),
+                        fusion::deref(fusion::prior(it1)),
+                        fusion::deref(it1),
+                        std::forward<Args>(args)...);
+            }
+
+            template<typename It1,typename...Args>
+            static Result
+            call(mpl::int_<1>,
+                            F f,
+                            It1 const& it1,
+                            Args&&... args)
+            {
+                return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+                    Result
+                >(static_cast<F>(f),
+                    fusion::deref(fusion::prior(it1)),
+                    std::forward<Args>(args)...);
+            }
+
+            template<typename It,typename...Args>
+            static Result
+            call(mpl::int_<0>,
+                            F f,
+                            It const& it,
+                            Args&&... args)
+            {
+                return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+                    Result
+                >(static_cast<F>(f),std::forward<Args>(args)...);
+            }
+        };
+    }
+
+    namespace forward_impl
+    {
+#ifndef BOOST_FUSION_RETURN_VOID
+        template<int NumArgsLeft, typename F, typename Begin, typename... Args>
+        struct BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)
+          : BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+                NumArgsLeft-1
+              , F
+              , Begin
+              , typename result_of::deref<
+                    typename result_of::advance_c<Begin, NumArgsLeft-1>::type
+                >::type
+              , Args...
+            >
+        {};
+
+        template<typename F, typename Begin, typename... Args>
+        struct BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+            0
+          , F
+          , Begin
+          , Args...
+        >
+          : BOOST_PP_CAT(
+                BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+                _impl)<
+                F
+              , Args...
+            >
+        {};
+#endif
+
+        template<typename F,typename Result>
+        struct BOOST_FUSION_INVOKE_NAME
+        {
+            template<typename Begin, typename... Args>
+            static Result
+            call(mpl::int_<0>, F f,Begin const&, Args&&... args)
+            {
+                return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+                    Result
+                >(std::forward<F>(f),std::forward<Args>(args)...);
+            }
+
+            template<int NumArgsLeft,typename Begin, typename... Args>
+            static Result
+            call(mpl::int_<NumArgsLeft>, F f, Begin const& begin,Args&&... args)
+            {
+                return call(
+                        mpl::int_<NumArgsLeft-1>(),
+                        f,
+                        begin,
+                        fusion::deref(fusion::advance_c<NumArgsLeft-1>(begin)),
+                        std::forward<Args>(args)...);
+            }
+        };
+    }
+
+    template<typename F, typename SeqRef>
+    struct BOOST_FUSION_INVOKE_NAME
+    {
+#ifdef BOOST_FUSION_RETURN_VOID
+        typedef void type;
+#else
+        typedef
+            mpl::eval_if<
+                traits::is_bidirectional<SeqRef>
+              , bidirectional_impl::
+                    BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+                    result_of::size<SeqRef>::value
+                  , F
+                  , typename result_of::end<SeqRef>::type
+                >
+              , forward_impl::
+                    BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+                    result_of::size<SeqRef>::value
+                  , F
+                  , typename result_of::begin<SeqRef>::type
+                >
+            >
+        impl_type;
+        typedef typename detail::remove_reference<F>::type f;
+        typedef preevaluate<F> preevaluater;
+
+        typedef typename
+            mpl::eval_if<
+                typename preevaluater::is_preevaluable
+              , preevaluater
+#   ifndef BOOST_FUSION_NO_MEMBER_PTR
+              , mpl::eval_if<
+                    is_member_object_pointer<f>
+                  , get_object_pointer_result_type_seq<f, SeqRef>
+#   endif
+                  , impl_type
+#   ifndef BOOST_FUSION_NO_MEMBER_PTR
+                >
+#   endif
+            >::type
+        type;
+#endif
+
+        static type
+        call_impl(mpl::false_ /*is_bidirectional*/,
+                    F f,
+                    SeqRef seq)
+        {
+            return forward_impl::BOOST_FUSION_INVOKE_NAME<
+                F
+              , type
+           >::call(mpl::int_<result_of::size<SeqRef>::value>(),
+                   f,
+                   fusion::begin(static_cast<SeqRef>(seq)));
+        }
+
+        static type
+        call_impl(mpl::true_ /*is_bidirectional*/,
+                    F f,
+                    SeqRef seq)
+        {
+            return bidirectional_impl::BOOST_PP_CAT(unrolled_,
+                BOOST_FUSION_INVOKE_NAME)<
+                F
+              , type
+            >::call(mpl::int_<result_of::size<SeqRef>::value>(),
+                    f,
+                    fusion::end(static_cast<SeqRef>(seq)));
+        }
+
+        static type
+        call(F f, SeqRef seq)
+        {
+            return call_impl(
+                traits::is_bidirectional<SeqRef>(),f,seq);
+        }
+    };
+}}}
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,7 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2005-2006 Joao Abecasis
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 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)
@@ -8,13 +10,12 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_HPP
 #define BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-#   include <boost/fusion/functional/invocation/detail/no_0x/invoke.hpp>
-#else
-#   define BOOST_FUSION_INVOKE_NAME invoke
-#   include <boost/fusion/functional/invocation/detail/0x/invoke_impl.hpp>
-#   undef BOOST_FUSION_INVOKE_NAME
-#endif
+#include <boost/fusion/functional/invocation/limits.hpp>
+
+#define BOOST_FUSION_INVOKE_IMPL_MAX_ARITY BOOST_FUSION_INVOKE_MAX_ARITY
+#define BOOST_FUSION_INVOKE_NAME invoke
+#include <boost/fusion/functional/invocation/detail/invoke.hpp>
+#undef BOOST_FUSION_INVOKE_NAME
+#undef BOOST_FUSION_INVOKE_IMPL_MAX_ARITY
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_function_object.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_function_object.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_function_object.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,7 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2005-2006 Joao Abecasis
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 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)
@@ -8,13 +10,14 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_FUNCTION_OBJECT_HPP
 #define BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_FUNCTION_OBJECT_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-#   include <boost/fusion/functional/invocation/detail/no_0x/invoke_function_object.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-#   define BOOST_FUSION_INVOKE_NAME invoke_function_object
-#   include <boost/fusion/functional/invocation/detail/0x/invoke_impl.hpp>
-#   undef BOOST_FUSION_INVOKE_NAME
-#endif
+#include <boost/fusion/functional/invocation/limits.hpp>
+
+#define BOOST_FUSION_INVOKE_IMPL_MAX_ARITY BOOST_FUSION_INVOKE_FUNCTION_OBJECT_MAX_ARITY
+#define BOOST_FUSION_NO_MEMBER_PTR
+#define BOOST_FUSION_INVOKE_NAME invoke_function_object
+#include <boost/fusion/functional/invocation/detail/invoke.hpp>
+#undef BOOST_FUSION_INVOKE_NAME
+#undef BOOST_FUSION_NO_MEMBER_PTR
+#undef BOOST_FUSION_INVOKE_IMPL_MAX_ARITY
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_procedure.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_procedure.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_procedure.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,7 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2005-2006 Joao Abecasis
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 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)
@@ -8,13 +10,14 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_PROCEDURE_HPP
 #define BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_PROCEDURE_HPP
 
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-#   include <boost/fusion/functional/invocation/detail/no_0x/invoke_procedure.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-#   define BOOST_FUSION_INVOKE_NAME invoke_procedure
-#   include <boost/fusion/functional/invocation/detail/0x/invoke_impl.hpp>
-#   undef BOOST_FUSION_INVOKE_NAME
-#endif
+#include <boost/fusion/functional/invocation/limits.hpp>
+
+#define BOOST_FUSION_INVOKE_IMPL_MAX_ARITY BOOST_FUSION_INVOKE_PROCEDURE_MAX_ARITY
+#define BOOST_FUSION_RETURN_VOID
+#define BOOST_FUSION_INVOKE_NAME invoke_procedure
+#include <boost/fusion/functional/invocation/detail/invoke.hpp>
+#undef BOOST_FUSION_INVOKE_NAME
+#undef BOOST_FUSION_RETURN_VOID
+#undef BOOST_FUSION_INVOKE_IMPL_MAX_ARITY
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/limits.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/limits.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/limits.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
 /*=============================================================================
     Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2009-2010 Christopher Schmidt
   
     Use modification and distribution are subject to the Boost Software 
     License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -11,7 +12,7 @@
 
 #include <boost/config.hpp>
 
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
 #   ifndef BOOST_FUSION_INVOKE_MAX_ARITY
 #       define BOOST_FUSION_INVOKE_MAX_ARITY 6
 #   endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/convenience/copy.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/convenience/copy.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/convenience/copy.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -15,6 +15,8 @@
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
 
+//TODO assoc_copy, assoc_move, assoc_swap
+
 namespace boost { namespace fusion
 {
     namespace detail
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -45,7 +45,6 @@
     struct sequence_facade
       : sequence_base<Derived>
     {
-        //TODO!!!
         typedef fusion_sequence_tag tag;
         typedef sequence_facade_tag fusion_tag;
         typedef Derived derived_type;
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/internal/result_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/internal/result_of.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/result_of.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,5 @@
 /*=============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 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)
@@ -10,24 +10,26 @@
 
 #include <boost/config.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
-
-#if defined(BOOST_NO_DECLTYPE) || !defined(BOOST_NO_VARIADIC_TEMPLATES)
-#   include <boost/mpl/bool.hpp>
-#endif
-#ifdef BOOST_NO_DECLTYPE
-#   include <boost/mpl/has_xxx.hpp>
-#   include <boost/mpl/eval_if.hpp>
-#   include <boost/mpl/identity.hpp>
-#endif
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-#   include <boost/mpl/identity.hpp>
-#endif
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/or.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/mpl/at.hpp>
+#   include <boost/mpl/front.hpp>
+#endif
 #include <boost/type_traits/is_pointer.hpp>
 #include <boost/type_traits/remove_pointer.hpp>
 #include <boost/type_traits/is_function.hpp>
 #include <boost/type_traits/is_member_function_pointer.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#   include <boost/function_types/components.hpp>
+#   include <boost/function_types/result_type.hpp>
+#   include <boost/function_types/is_function.hpp>
+#   include <boost/function_types/is_member_function_pointer.hpp>
+#   include <boost/utility/enable_if.hpp>
+#endif
 #include <boost/utility/result_of.hpp>
 
 namespace boost { namespace fusion { namespace detail
@@ -77,7 +79,12 @@
         typedef typename F::result_type type;
     };
 
-    template<typename F>
+    template<
+        typename F
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+      , typename Enable=void
+#endif
+    >
     struct preevaluate_impl
     {
         typedef typename has_result_type<F>::type is_preevaluable;
@@ -90,7 +97,12 @@
         type;
     };
 #else
-    template<typename F>
+    template<
+        typename F
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+      , typename Enable=void
+#endif
+    >
     struct preevaluate_impl
     {
         typedef mpl::false_ is_preevaluable;
@@ -98,8 +110,31 @@
     };
 #endif
 
-    //cschmidt: a pp implementation won't be worth the effort
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
+    //TODO Tests!
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+    template<typename F>
+    struct preevaluate_impl<
+        F
+      , typename enable_if<function_types::is_function<F> >::type
+    >
+    {
+        typedef mpl::true_ is_preevaluable;
+        typedef typename function_types::result_type<F>::type type;
+    };
+
+    template<typename F>
+    struct preevaluate_impl<
+        F
+      , typename enable_if<function_types::is_member_function_pointer<F> >::type
+    >
+    {
+        typedef typename function_types::components<F>::type components;
+
+        typedef mpl::true_ is_preevaluable;
+        typedef typename mpl::front<components>::type type;
+        typedef typename mpl::at_c<components,1>::type class_type;
+    };
+#else
     template<typename Result,typename... Args>
     struct preevaluate_impl<Result (Args...)>
     {
@@ -147,9 +182,6 @@
     template<typename F>
     struct preevaluate
     {
-#if defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_NO_DECLTYPE)
-        typedef mpl::false_ is_preevaluable;
-#else
         typedef
             preevaluate_impl<
                 typename remove_pointer<typename identity<F>::type>::type
@@ -157,7 +189,6 @@
         gen;
         typedef typename gen::type type;
         typedef typename gen::is_preevaluable is_preevaluable;
-#endif
     };
 
     //cschmidt: boost::result_of does not like ref-qualified
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/internal/template.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/internal/template.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/template.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -30,7 +30,7 @@
 #   define DUMMY1(_)
 #   define DUMMY2(_,__)
 
-    //cschmidt: for claritys sake no linebreaks
+    //cschmidt: for claritys sake no linebreaks and no BOOST_FUSION_-prefix . TODO!!!
 #   define VARIADIC_TEMPLATE(N)                 template<BOOST_PP_ENUM_PARAMS(N, typename T)>
 #   define VARIADIC_TEMPLATE_WITH_DEFAULT(N)    template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(N, typename T, void_)>
 #   define EXPAND_TEMPLATE_ARGUMENTS(N)         BOOST_PP_ENUM_PARAMS(N, T)
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -16,8 +16,6 @@
 #include <boost/type_traits/add_const.hpp>
 #include <boost/type_traits/remove_const.hpp>
 
-//TODO is_convertible assert
-
 namespace boost { namespace fusion { namespace detail
 {
     template<typename T>
Deleted: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
+++ (empty file)
@@ -1,105 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2009 Hartmut Kaiser
-    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)
-==============================================================================*/
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
-    namespace result_of
-    {
-        template<
-            typename Seq
-#if BOOST_FUSION_N
-          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I)
-#endif
-        >
-        struct as_nview
-#if BOOST_FUSION_N!=FUSION_MAX_VECTOR_SIZE
-        <
-            Seq
-#   if BOOST_FUSION_N
-          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#   endif
-        >
-#endif
-        {
-            BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
-            BOOST_FUSION_MPL_ASSERT((traits::is_random_access<Seq>));
-
-            typedef
-                nview<
-                    Seq
-                  , mpl::BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_FUSION_N),_c)<
-                        int
-#if BOOST_FUSION_N
-                      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#endif
-                    >
-                >
-            type;
-        };
-    }
-
-    template<
-#if BOOST_FUSION_N
-        BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
-#endif
-        typename Seq
-    >
-    typename result_of::as_nview<
-        BOOST_FUSION_R_ELSE_CLREF(Seq)
-#if BOOST_FUSION_N
-      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#endif
-    >::type
-    as_nview(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
-    {
-        return typename result_of::as_nview<
-                BOOST_FUSION_R_ELSE_CLREF(Seq)
-#if BOOST_FUSION_N
-              , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#endif
-            >::type(BOOST_FUSION_FORWARD(Seq,seq));
-    }
-
-#ifdef BOOST_NO_RVALUE_REFERENCES
-    template<
-#   if BOOST_FUSION_N
-        BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
-#   endif
-        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::as_nview<
-            Seq&
-#   if BOOST_FUSION_N
-          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#   endif
-        >
-    >::type
-#   else
-    typename result_of::as_nview<
-        Seq&
-#       if BOOST_FUSION_N
-      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#       endif
-    >::type
-#   endif
-    as_nview(Seq& seq)
-    {
-        return typename result_of::as_nview<
-                Seq&
-#   if BOOST_FUSION_N
-              , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#   endif
-            >::type(seq);
-    }
-#endif
-
-#undef BOOST_FUSION_N
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview_n.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,105 @@
+/*=============================================================================
+    Copyright (c) 2009 Hartmut Kaiser
+    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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        template<
+            typename Seq
+#if BOOST_FUSION_N
+          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I)
+#endif
+        >
+        struct as_nview
+#if BOOST_FUSION_N!=FUSION_MAX_VECTOR_SIZE
+        <
+            Seq
+#   if BOOST_FUSION_N
+          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#   endif
+        >
+#endif
+        {
+            BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+            BOOST_FUSION_MPL_ASSERT((traits::is_random_access<Seq>));
+
+            typedef
+                nview<
+                    Seq
+                  , mpl::BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_FUSION_N),_c)<
+                        int
+#if BOOST_FUSION_N
+                      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+                    >
+                >
+            type;
+        };
+    }
+
+    template<
+#if BOOST_FUSION_N
+        BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
+#endif
+        typename Seq
+    >
+    typename result_of::as_nview<
+        BOOST_FUSION_R_ELSE_CLREF(Seq)
+#if BOOST_FUSION_N
+      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+    >::type
+    as_nview(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+    {
+        return typename result_of::as_nview<
+                BOOST_FUSION_R_ELSE_CLREF(Seq)
+#if BOOST_FUSION_N
+              , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+            >::type(BOOST_FUSION_FORWARD(Seq,seq));
+    }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+    template<
+#   if BOOST_FUSION_N
+        BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
+#   endif
+        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::as_nview<
+            Seq&
+#   if BOOST_FUSION_N
+          , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#   endif
+        >
+    >::type
+#   else
+    typename result_of::as_nview<
+        Seq&
+#       if BOOST_FUSION_N
+      , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#       endif
+    >::type
+#   endif
+    as_nview(Seq& seq)
+    {
+        return typename result_of::as_nview<
+                Seq&
+#   if BOOST_FUSION_N
+              , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#   endif
+            >::type(seq);
+    }
+#endif
+
+#undef BOOST_FUSION_N
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -162,9 +162,9 @@
     }
 
 #   define BOOST_PP_FILENAME_1\
-        <boost/fusion/view/nview/detail/pp/as_nview.hpp>
+        <boost/fusion/view/nview/detail/pp/as_nview_n.hpp>
 #   define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_VECTOR_SIZE)
-    #include BOOST_PP_ITERATE()
+#   include BOOST_PP_ITERATE()
 #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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -61,8 +61,7 @@
 #define BOOST_FUSION_REVERSE_VIEW_CTOR(MODIFIER,_)\
         template<typename OtherSeq>\
         reverse_view(reverse_view<OtherSeq> MODIFIER view)\
-          : seq(BOOST_FUSION_FORWARD(\
-                reverse_view<OtherSeq> MODIFIER,view).seq)\
+          : seq(static_cast<reverse_view<OtherSeq> MODIFIER>(view).seq)\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_REVERSE_VIEW_CTOR,_)
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	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -190,8 +190,6 @@
         return typename result_of::make_single_view<T&>::type(val);
     }
 #endif
-
-    //TODO random access
 }}
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -167,8 +167,8 @@
 #define BOOST_FUSION_ZIP_VIEW_CTOR(MODIFIER,_)\
         template<typename OtherSeqs>\
         zip_view(zip_view<OtherSeqs> MODIFIER view)\
-          : seqs(fusion::sequence_assign(BOOST_FUSION_FORWARD(\
-                zip_view<OtherSeqs> MODIFIER,view).seqs))\
+          : seqs(fusion::sequence_assign(\
+              static_cast<zip_view<OtherSeqs> MODIFIER>(view).seqs))\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_ZIP_VIEW_CTOR,_)
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/remove_if.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/remove_if.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/remove_if.cpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -67,9 +67,9 @@
 
     {
         typedef vector<Y, char, long, X, bool> mpl_vec;
-        BOOST_TEST((remove_if<not_<is_class<_> > >(mpl_vec())
+        BOOST_TEST((fusion::remove_if<not_<is_class<_> > >(mpl_vec())
             == vector<Y, X>()));
-        BOOST_TEST((remove_if<is_class<_> >(mpl_vec())
+        BOOST_TEST((fusion::remove_if<is_class<_> >(mpl_vec())
             == vector<char, long, bool>()));
     }
 
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/functional/invoke.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/functional/invoke.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/functional/invoke.cpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -228,7 +228,7 @@
 
     // Pointer to data member
 
-    //TODO!!!
+    //TODO
     //BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_obj_ctx,seq)) = that.data));
     BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ref_ctx,seq)) = that.data));
     BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ptr_ctx,seq)) = that.data));
@@ -238,7 +238,7 @@
     BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ptr_c_ctx,seq)));
     BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_spt_c_ctx,seq)));
 
-    //TODO!!!
+    //TODO
     //BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_obj_d_ctx,seq)) = that.data));
     BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ref_d_ctx,seq)) = that.data));
     BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ptr_d_ctx,seq)) = that.data));
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused.cpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -70,7 +70,8 @@
     using boost::is_same;
 
     typedef fusion::unfused< test_func<> > t;
-    BOOST_TEST(( is_same< boost::result_of< t () >::type, long >::value ));
+    //TODO
+    BOOST_TEST(( is_same< t::result<t ()>::type, long >::value ));
     BOOST_TEST(( is_same< boost::result_of< t (int) >::type, long >::value ));
 }
 
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused_typed.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused_typed.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused_typed.cpp	2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -82,7 +82,8 @@
     using boost::is_same;
 
     typedef fusion::unfused_typed< test_func<>, types0 > t0;
-    BOOST_TEST(( is_same< boost::result_of< t0 () >::type, long >::value ));
+    //TODO
+    BOOST_TEST(( is_same< t0::result<t0 () >::type, long >::value ));
     typedef fusion::unfused_typed< test_func<>, types1 > t1;
     BOOST_TEST(( is_same< boost::result_of< t1 (int) >::type, long >::value ));
 }