$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r60988 - in sandbox/SOC/2009/fusion/boost/fusion: adapted adapted/detail/struct adapted/struct algorithm/query/detail include iterator sequence/comparison/detail support support/internal
From: mr.chr.schmidt_at_[hidden]
Date: 2010-04-01 07:45:27
Author: cschmidt
Date: 2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
New Revision: 60988
URL: http://svn.boost.org/trac/boost/changeset/60988
Log:
added intrusive struct generating macros
Added:
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/define_struct.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/namespace.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/define_assoc_struct.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/define_struct.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/include/define_assoc_struct.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/include/define_struct.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/support/internal/constexpr.hpp   (contents, props changed)
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_base.hpp         |     6 +++---                                  
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/proxy_type.hpp         |    37 +++----------------------------------   
   sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp                           |     2 ++                                      
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp               |     8 +++-----                                
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp             |     9 +++------                               
   sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp                        |    13 +++----------                           
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/equal_to.hpp      |    12 +++---------                            
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/greater.hpp       |     9 +++------                               
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/greater_equal.hpp |     9 +++------                               
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/less.hpp          |     9 +++------                               
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/less_equal.hpp    |     9 +++------                               
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/not_equal_to.hpp  |     9 +++------                               
   sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp                             |     2 ++                                      
   13 files changed, 37 insertions(+), 97 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_base.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_base.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_base.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -92,18 +92,18 @@
     {                                                                           \
         typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) type;   \
                                                                                 \
-        template<typename Seq>                                                  \
+        template<typename SeqRef>                                               \
         struct apply                                                            \
         {                                                                       \
             typedef typename                                                    \
                 detail::forward_as<                                             \
-                    Seq                                                         \
+                    SeqRef                                                      \
                   , BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE)     \
                 >::type                                                         \
             type;                                                               \
                                                                                 \
             static type                                                         \
-            call(Seq seq)                                                       \
+            call(SeqRef seq)                                                    \
             {                                                                   \
                 return seq.PREFIX                                               \
                     BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE);    \
Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/define_struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/define_struct.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -0,0 +1,447 @@
+/*=============================================================================
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_DEFINE_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_DEFINE_STRUCT_HPP
+
+#include <boost/config.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/advance_c.hpp>
+#include <boost/fusion/adapted/detail/struct/adapt_base.hpp>
+#include <boost/fusion/adapted/detail/struct/namespace.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/assert.hpp>
+#include <boost/fusion/support/internal/sequence_assign.hpp>
+#include <boost/fusion/support/internal/is_explicitly_convertible.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/if.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/logical/not.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/tuple/eat.hpp>
+#ifndef BOOST_NO_RVALUE_REFERENCES
+#   include <boost/preprocessor/repetition/enum_params.hpp>
+#   include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#else
+#   include <boost/call_traits.hpp>
+#endif
+#include <boost/utility/enable_if.hpp>
+
+#define BOOST_FUSION_DEFINE_STRUCT_COPY_MOVE_CTOR_FILLER_I(                     \
+    R, DATA, I, ATTRIBUTE)                                                      \
+                                                                                \
+    BOOST_PP_COMMA_IF(I)                                                        \
+    BOOST_PP_TUPLE_ELEM(BOOST_PP_TUPLE_ELEM(3,2,DATA),1,ATTRIBUTE)(             \
+        static_cast<self_type BOOST_PP_TUPLE_ELEM(3,0,DATA)>(other_self).       \
+            BOOST_PP_TUPLE_ELEM(BOOST_PP_TUPLE_ELEM(3,2,DATA),1,ATTRIBUTE))
+
+#define BOOST_FUSION_DEFINE_STRUCT_COPY_MOVE_CTOR(MODIFIER,DATA)                \
+    BOOST_PP_TUPLE_ELEM(3,0,DATA)(self_type MODIFIER other_self)                \
+      : BOOST_PP_SEQ_FOR_EACH_I_R(                                              \
+            1,                                                                  \
+            BOOST_FUSION_DEFINE_STRUCT_COPY_MOVE_CTOR_FILLER_I,                 \
+            (                                                                   \
+                MODIFIER,                                                       \
+                BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(3,1,DATA)),               \
+                BOOST_PP_TUPLE_ELEM(3,2,DATA)                                   \
+            ),                                                                  \
+            BOOST_PP_TUPLE_ELEM(3,1,DATA))                                      \
+    {}
+
+#define BOOST_FUSION_DEFINE_STRUCT_ASSIGN_FILLER_I(                             \
+    R, ATTRIBUTE_TUPEL_SIZE, I_, ATTRIBUTE)                                     \
+                                                                                \
+    BOOST_PP_IF(                                                                \
+        I_,                                                                     \
+        typedef typename                                                        \
+            boost::fusion::result_of::next<                                     \
+                BOOST_PP_CAT(I,BOOST_PP_DEC(I_))&                               \
+            >::type                                                             \
+        BOOST_PP_CAT(I,I_);                                                     \
+        BOOST_PP_CAT(I,I_) BOOST_PP_CAT(i,I_)=                                  \
+            boost::fusion::next(BOOST_PP_CAT(i,BOOST_PP_DEC(I_)));,             \
+        BOOST_PP_EMPTY()                                                        \
+        )                                                                       \
+                                                                                \
+    BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)=                      \
+        boost::fusion::deref(BOOST_PP_CAT(i,I_));
+
+#define BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP(                                   \
+    ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                                       \
+                                                                                \
+    template<typename Seq>                                                      \
+    self_type&                                                                  \
+    operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)                               \
+    {                                                                           \
+        BOOST_FUSION_STATIC_ASSERT((                                            \
+            BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)==result_of::size<Seq>::value));   \
+                                                                                \
+        typedef typename                                                        \
+            boost::fusion::result_of::begin<                                    \
+                BOOST_FUSION_R_ELSE_CLREF(Seq)                                  \
+            >::type                                                             \
+        I0;                                                                     \
+        I0 i0=boost::fusion::begin(BOOST_FUSION_FORWARD(Seq,seq));              \
+                                                                                \
+        BOOST_PP_SEQ_FOR_EACH_I_R(                                              \
+            1,                                                                  \
+            BOOST_FUSION_DEFINE_STRUCT_ASSIGN_FILLER_I,                         \
+            ATTRIBUTE_TUPEL_SIZE,                                               \
+            ATTRIBUTES_SEQ)                                                     \
+                                                                                \
+        return *this;                                                           \
+    }
+
+#define BOOST_FUSION_DEFINE_STRUCT_ATTR_I(R, ATTRIBUTE_TUPEL_SIZE, ATTRIBUTE)   \
+                                                                                \
+    BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,0,ATTRIBUTE)                       \
+        BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE);
+
+#define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I(                           \
+    R, DATA, I, ATTRIBUTE)                                                      \
+                                                                                \
+    BOOST_PP_COMMA_IF(I)                                                        \
+    BOOST_PP_TUPLE_ELEM(BOOST_PP_TUPLE_ELEM(2,1,DATA),1,ATTRIBUTE)(             \
+        boost::fusion::deref(boost::fusion::advance_c<I>(boost::fusion::begin(  \
+            BOOST_PP_TUPLE_ELEM(2,0,DATA)))))
+
+#define BOOST_FUSION_DEFINE_STRUCT_SEQ_ASSIGN_CTOR(MODIFIER, DATA)              \
+                                                                                \
+    template<typename SeqRef>                                                   \
+    BOOST_PP_TUPLE_ELEM(3, 0, DATA)(                                            \
+        boost::fusion::detail::sequence_assign_type<SeqRef> MODIFIER seq_assign)\
+      : BOOST_PP_SEQ_FOR_EACH_I_R(                                              \
+            1,                                                                  \
+            BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I,                       \
+            (                                                                   \
+                seq_assign.get(),                                               \
+                BOOST_PP_TUPLE_ELEM(3, 2, DATA)                                 \
+            ),                                                                  \
+            BOOST_PP_TUPLE_ELEM(3, 1, DATA))                                    \
+    {                                                                           \
+        BOOST_FUSION_STATIC_ASSERT((                                            \
+            BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(3, 1, DATA))==                \
+                result_of::size<SeqRef>::value));\
+    }
+
+#define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_DISABLER(                           \
+    ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                                       \
+                                                                                \
+    , typename boost::disable_if<                                               \
+        boost::fusion::detail::is_explicitly_convertible<                       \
+            BOOST_FUSION_R_ELSE_CLREF(Seq)                                      \
+          , BOOST_FUSION_R_ELSE_CLREF(BOOST_PP_TUPLE_ELEM(                      \
+                ATTRIBUTE_TUPEL_SIZE,                                           \
+                0,                                                              \
+                BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)))                             \
+        >                                                                       \
+    >::type* =0
+
+#define BOOST_FUSION_DEFINE_STRUCT_SEQ_DEFAULT_CTOR_FILLER_I(                   \
+    R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE)                                      \
+                                                                                \
+    BOOST_PP_COMMA_IF(I)                                                        \
+    BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)()
+
+#define BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL(                                   \
+    NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                                 \
+                                                                                \
+    BOOST_PP_SEQ_FOR_EACH_R(                                                    \
+        1,                                                                      \
+        BOOST_FUSION_DEFINE_STRUCT_ATTR_I,                                      \
+        ATTRIBUTE_TUPEL_SIZE,                                                   \
+        ATTRIBUTES_SEQ)                                                         \
+                                                                                \
+    BOOST_FUSION_CONSTEXPR                                                      \
+    NAME()                                                                      \
+      : BOOST_PP_SEQ_FOR_EACH_I_R(                                              \
+            1,                                                                  \
+            BOOST_FUSION_DEFINE_STRUCT_SEQ_DEFAULT_CTOR_FILLER_I,               \
+            ATTRIBUTE_TUPEL_SIZE,                                               \
+            ATTRIBUTES_SEQ)                                                     \
+    {}                                                                          \
+                                                                                \
+    BOOST_FUSION_ALL_CTOR_COMBINATIONS(                                         \
+        BOOST_FUSION_DEFINE_STRUCT_COPY_MOVE_CTOR,                              \
+        (NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE))                           \
+                                                                                \
+    template<typename Seq>                                                      \
+    NAME(BOOST_FUSION_R_ELSE_CLREF(Seq) seq                                     \
+        BOOST_PP_IF(                                                            \
+            BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)),                    \
+            BOOST_PP_TUPLE_EAT(2),                                              \
+            BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_DISABLER)(                      \
+                ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                           \
+        )                                                                       \
+      : BOOST_PP_SEQ_FOR_EACH_I_R(                                              \
+            1,                                                                  \
+            BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I,                       \
+            (                                                                   \
+                BOOST_FUSION_FORWARD(Seq,seq),                                  \
+                ATTRIBUTE_TUPEL_SIZE                                            \
+            ),                                                                  \
+            ATTRIBUTES_SEQ)                                                     \
+    {                                                                           \
+        BOOST_FUSION_STATIC_ASSERT((                                            \
+            BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)==result_of::size<SeqRef>::value));\
+    }                                                                           \
+                                                                                \
+    BOOST_FUSION_ALL_CTOR_COMBINATIONS(                                         \
+        BOOST_FUSION_DEFINE_STRUCT_SEQ_ASSIGN_CTOR,                             \
+        (NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE))                           \
+                                                                                \
+    BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP(ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
+
+#ifndef BOOST_NO_VARIADIC_TEMPLATES
+#   define BOOST_FUSION_DEFINE_STRUCT_CTOR_1(                                   \
+        NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                             \
+                                                                                \
+        template<typename Arg>                                                  \
+        explicit                                                                \
+        NAME(BOOST_FUSION_R_ELSE_CLREF(Arg) arg                                 \
+          , typename boost::enable_if<                                          \
+                boost::fusion::detail::is_explicitly_convertible<               \
+                    BOOST_FUSION_R_ELSE_CLREF(Arg)                              \
+                  , BOOST_PP_TUPLE_ELEM(                                        \
+                      ATTRIBUTE_TUPEL_SIZE,0,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
+                >                                                               \
+            >::type* =0)                                                        \
+          : BOOST_PP_TUPLE_ELEM(                                                \
+                ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(      \
+                    BOOST_FUSION_FORWARD(Arg,arg))                              \
+        {}                                                                      \
+                                                                                \
+        template<typename Arg1, typename Arg2, typename... Args>                \
+        NAME(BOOST_FUSION_R_ELSE_CLREF(Arg1) arg1                               \
+          , BOOST_FUSION_R_ELSE_CLREF(Arg2) arg2                                \
+          , BOOST_FUSION_R_ELSE_CLREF(Args)... args)                            \
+          : BOOST_PP_TUPLE_ELEM(                                                \
+                ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(      \
+                    BOOST_FUSION_FORWARD(Arg1,arg1),                            \
+                    BOOST_FUSION_FORWARD(Arg2,arg2),                            \
+                    BOOST_FUSION_FORWARD(Args,args)...)                         \
+        {}
+
+#   define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1(                               \
+        TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)        \
+                                                                                \
+        BOOST_FUSION_DEFINE_STRUCT_CTOR_1(                                      \
+            NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
+#elif defined(BOOST_NO_RVALUE_REFERENCES)
+#   define BOOST_FUSION_DEFINE_STRUCT_CTOR_1(                                   \
+        NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                             \
+                                                                                \
+        explicit                                                                \
+        NAME(boost::call_traits<                                                \
+                BOOST_PP_TUPLE_ELEM(                                            \
+                    ATTRIBUTE_TUPEL_SIZE,0,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))   \
+            >::param_type arg)                                                  \
+          : BOOST_PP_TUPLE_ELEM(                                                \
+                ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg)  \
+        {}
+
+#   define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1(                               \
+        TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)        \
+                                                                                \
+        explicit                                                                \
+        NAME(typename boost::call_traits<                                       \
+                typename boost::fusion::detail::get_first_arg<                  \
+                    BOOST_PP_TUPLE_ELEM(                                        \
+                        ATTRIBUTE_TUPEL_SIZE,                                   \
+                        0,                                                      \
+                        BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))                      \
+                  , BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ)                      \
+                >::type                                                         \
+            >::param_type arg)                                                  \
+          : BOOST_PP_TUPLE_ELEM(                                                \
+                ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg)  \
+        {}
+#else
+#   define BOOST_FUSION_DEFINE_STRUCT_CTOR_1(                                   \
+        NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                             \
+                                                                                \
+        template<typename Arg>                                                  \
+        explicit                                                                \
+        NAME(Arg&& arg                                                          \
+          , typename enable_if<                                                 \
+                detail::is_explicitly_convertible<                              \
+                    Arg&&                                                       \
+                  , BOOST_PP_TUPLE_ELEM(                                        \
+                      ATTRIBUTE_TUPEL_SIZE,0,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
+                >                                                               \
+            >::type* =0)                                                        \
+          : BOOST_PP_TUPLE_ELEM(                                                \
+                ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(      \
+                    std::forward<Arg>(arg))                                     \
+        {}
+
+#   define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1(                               \
+        TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)        \
+                                                                                \
+        BOOST_FUSION_DEFINE_STRUCT_CTOR_1(                                      \
+            NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
+#endif
+
+#define BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I(                               \
+    R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE)                                      \
+                                                                                \
+    BOOST_PP_COMMA_IF(I)                                                        \
+    BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)(                      \
+        BOOST_FUSION_FORWARD(BOOST_PP_CAT(A,I),BOOST_PP_CAT(_,I)))
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+#   define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I(R, DATA, I, ATTRIBUTE)     \
+                                                                                \
+        BOOST_PP_COMMA_IF(I)                                                    \
+        typename boost::call_traits<                                            \
+            typename boost::fusion::detail::get_first_arg<                      \
+                BOOST_PP_TUPLE_ELEM(                                            \
+                    BOOST_PP_TUPLE_ELEM(3,0,DATA),                              \
+                    0,                                                          \
+                    ATTRIBUTE)                                                  \
+              , BOOST_PP_TUPLE_ELEM(3,2,DATA)                                   \
+            >::type                                                             \
+        >::param_type BOOST_PP_CAT(_,I)
+
+#   define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N(                               \
+        TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)        \
+                                                                                \
+        NAME(BOOST_PP_SEQ_FOR_EACH_I_R(                                         \
+                1,                                                              \
+                BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I,                      \
+                (                                                               \
+                    ATTRIBUTE_TUPEL_SIZE,                                       \
+                    BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ),                          \
+                    BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ)                      \
+                ),                                                              \
+                ATTRIBUTES_SEQ))                                                \
+          : BOOST_PP_SEQ_FOR_EACH_I_R(                                          \
+                1,                                                              \
+                BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I,                       \
+                ATTRIBUTE_TUPEL_SIZE,                                           \
+                ATTRIBUTES_SEQ)                                                 \
+        {}
+
+#   define BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I(                               \
+        R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE)                                  \
+                                                                                \
+        BOOST_PP_COMMA_IF(I)                                                    \
+        boost::call_traits<                                                     \
+            BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,0,ATTRIBUTE)               \
+        >::param_type BOOST_PP_CAT(_,I)
+
+#   define BOOST_FUSION_DEFINE_STRUCT_CTOR_N(                                   \
+        NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                             \
+                                                                                \
+        NAME(BOOST_PP_SEQ_FOR_EACH_I_R(                                         \
+                1,                                                              \
+                BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I,                          \
+                ATTRIBUTE_TUPEL_SIZE,                                           \
+                ATTRIBUTES_SEQ))                                                \
+          : BOOST_PP_SEQ_FOR_EACH_I_R(                                          \
+                1,                                                              \
+                BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I,                       \
+                ATTRIBUTE_TUPEL_SIZE,                                           \
+                ATTRIBUTES_SEQ)                                                 \
+        {}
+#else
+#   define BOOST_FUSION_DEFINE_STRUCT_CTOR_N(                                   \
+        NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                             \
+                                                                                \
+        template<                                                               \
+            BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), typename A) \
+        >                                                                       \
+        NAME(BOOST_PP_ENUM_BINARY_PARAMS(                                       \
+                BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), A,&& _))                     \
+          : BOOST_PP_SEQ_FOR_EACH_I_R(                                          \
+                1,                                                              \
+                BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I,                       \
+                ATTRIBUTE_TUPEL_SIZE,                                           \
+                ATTRIBUTES_SEQ)                                                 \
+        {}
+
+#   define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N(                               \
+        TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)        \
+                                                                                \
+        BOOST_FUSION_DEFINE_STRUCT_CTOR_N(                                      \
+            NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
+#endif
+
+#define BOOST_FUSION_DEFINE_STRUCT_CTOR(ATTRIBUTES_SEQ)                         \
+    BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)),                \
+        BOOST_FUSION_DEFINE_STRUCT_CTOR_N,                                      \
+        BOOST_FUSION_DEFINE_STRUCT_CTOR_1)
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR(ATTRIBUTES_SEQ)                     \
+    BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)),                \
+        BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N,                                  \
+        BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1)
+
+#define BOOST_FUSION_DEFINE_STRUCT_IMPL(                                        \
+    NAMESPACE_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                  \
+                                                                                \
+    BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ)         \
+                                                                                \
+    struct NAME                                                                 \
+    {                                                                           \
+        typedef NAME self_type;                                                 \
+                                                                                \
+        BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL(                                   \
+            NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                         \
+                                                                                \
+        BOOST_FUSION_DEFINE_STRUCT_CTOR(ATTRIBUTES_SEQ)(                        \
+            NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                         \
+    };                                                                          \
+                                                                                \
+    BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL(                                    \
+    TEMPLATE_PARAMS_SEQ,                                                        \
+    NAMESPACE_SEQ,                                                              \
+    NAME,                                                                       \
+    ATTRIBUTES_SEQ,                                                             \
+    ATTRIBUTE_TUPEL_SIZE)                                                       \
+                                                                                \
+    BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ)         \
+                                                                                \
+    template<                                                                   \
+        BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL(                  \
+            (0)TEMPLATE_PARAMS_SEQ)                                             \
+    >                                                                           \
+    struct NAME                                                                 \
+    {                                                                           \
+        typedef NAME self_type;                                                 \
+                                                                                \
+        BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL(                                   \
+            NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)                         \
+                                                                                \
+        BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR(ATTRIBUTES_SEQ)(                    \
+            TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)    \
+    };                                                                          \
+                                                                                \
+    BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
+
+namespace boost { namespace fusion { namespace detail
+{
+    template<typename A1, typename A2>
+    struct get_first_arg
+    {
+        typedef A1 type;
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/namespace.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/namespace.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -0,0 +1,51 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 Hartmut Kaiser
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_NAMESPACE_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_NAMESPACE_HPP
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/tuple/eat.hpp>
+
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_BEGIN_I(R,DATA,ELEM)                \
+    namespace ELEM {
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_END_I(Z,I,DATA) }
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I(Z,I,ELEM) ELEM::
+
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ)     \
+    BOOST_PP_IF(                                                                \
+        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)),                         \
+        BOOST_PP_SEQ_FOR_EACH_R,                                                \
+        BOOST_PP_TUPLE_EAT(4))(                                                 \
+            1,                                                                  \
+            BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_BEGIN_I,                        \
+            _,                                                                  \
+            BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ))
+
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)       \
+    BOOST_PP_REPEAT_1(                                                          \
+        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)),                         \
+        BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_END_I,                              \
+        _)
+
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION(NAMESPACE_SEQ)          \
+    BOOST_PP_IF(                                                                \
+        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)),                         \
+        BOOST_PP_SEQ_FOR_EACH_R,                                                \
+        BOOST_FUSION_ADAPT_STRUCT_PROXY_DUMMY4)(                                \
+            1,                                                                  \
+            BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I,                  \
+            _,                                                                  \
+            BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ))
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/proxy_type.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/proxy_type.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/proxy_type.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,30 +9,12 @@
 #ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_PROXY_TYPE_HPP
 #define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_PROXY_TYPE_HPP
 
-#include <boost/preprocessor/dec.hpp>
-#include <boost/preprocessor/control/if.hpp>
-#include <boost/preprocessor/seq/seq.hpp>
-#include <boost/preprocessor/seq/for_each.hpp>
-#include <boost/preprocessor/seq/size.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-
-#define BOOST_FUSION_ADAPT_STRUCT_PROXY_DUMMY4(A,B,C,D)
-#define BOOST_FUSION_ADAPT_STRUCT_PROXY_TYPE_NS_BEGIN(R,DATA,ELEM)              \
-    namespace ELEM {
-#define BOOST_FUSION_ADAPT_STRUCT_PROXY_TYPE_NS_END(Z,I,DATA) }
-#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I(Z,I,ELEM) ELEM::
+#include <boost/fusion/adapted/detail/struct/namespace.hpp>
 
 #define BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE(                            \
     WRAPPED_TYPE,NAMESPACE_SEQ,NAME)                                            \
                                                                                 \
-    BOOST_PP_IF(                                                                \
-        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)),                         \
-        BOOST_PP_SEQ_FOR_EACH_R,                                                \
-        BOOST_FUSION_ADAPT_STRUCT_PROXY_DUMMY4)(                                \
-            1,                                                                  \
-            BOOST_FUSION_ADAPT_STRUCT_PROXY_TYPE_NS_BEGIN,                      \
-            _,                                                                  \
-            BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ))                                   \
+    BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ)         \
                                                                                 \
     struct NAME                                                                 \
     {                                                                           \
@@ -43,19 +25,6 @@
         WRAPPED_TYPE& obj;                                                      \
     };                                                                          \
                                                                                 \
-    BOOST_PP_REPEAT_1(                                                          \
-        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)),                         \
-        BOOST_FUSION_ADAPT_STRUCT_PROXY_TYPE_NS_END,                            \
-        _)
-
-#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION(NAMESPACE_SEQ)          \
-    BOOST_PP_IF(                                                                \
-        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)),                         \
-        BOOST_PP_SEQ_FOR_EACH_R,                                                \
-        BOOST_FUSION_ADAPT_STRUCT_PROXY_DUMMY4)(                                \
-            1,                                                                  \
-            BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I,                  \
-            _,                                                                  \
-            BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ))
+    BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
 
 #endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -14,5 +14,7 @@
 #include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
 #include <boost/fusion/adapted/struct/adapt_struct_named.hpp>
 #include <boost/fusion/adapted/struct/adapt_struct.hpp>
+#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
+#include <boost/fusion/adapted/struct/define_struct.hpp>
 
 #endif
Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/define_assoc_struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/define_assoc_struct.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -0,0 +1,41 @@
+/*=============================================================================
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_STRUCT_DEFINE_ASSOC_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_ASSOC_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
+#include <boost/fusion/adapted/detail/struct/define_struct.hpp>
+
+#define BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT(                                   \
+    TEMPLATE_PARAMS_SEQ, NAMESPACE_SEQ, NAME, ATTRIBUTES)                       \
+                                                                                \
+    BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL(                                        \
+        TEMPLATE_PARAMS_SEQ,                                                    \
+        (0)NAMESPACE_SEQ,                                                       \
+        NAME,                                                                   \
+        BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END),       \
+        3)                                                                      \
+                                                                                \
+    BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(                                        \
+        TEMPLATE_PARAMS_SEQ,                                                    \
+        (BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ) NAME)\
+        TEMPLATE_PARAMS_SEQ,                                                    \
+        ATTRIBUTES)
+
+#define BOOST_FUSION_DEFINE_ASSOC_STRUCT(NAMESPACE_SEQ,NAME,ATTRIBUTES)         \
+    BOOST_FUSION_DEFINE_STRUCT_IMPL(                                            \
+        (0)NAMESPACE_SEQ,                                                       \
+        NAME,                                                                   \
+        BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END),       \
+        3)                                                                      \
+                                                                                \
+    BOOST_FUSION_ADAPT_ASSOC_STRUCT(                                            \
+        BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ) NAME, \
+        ATTRIBUTES)
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/define_struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/define_struct.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -0,0 +1,41 @@
+/*=============================================================================
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/adapt_struct.hpp>
+#include <boost/fusion/adapted/detail/struct/define_struct.hpp>
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT(                                         \
+    TEMPLATE_PARAMS_SEQ, NAMESPACE_SEQ, NAME, ATTRIBUTES)                       \
+                                                                                \
+    BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL(                                        \
+        TEMPLATE_PARAMS_SEQ,                                                    \
+        (0)NAMESPACE_SEQ,                                                       \
+        NAME,                                                                   \
+        BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END),       \
+        2)                                                                      \
+                                                                                \
+    BOOST_FUSION_ADAPT_TPL_STRUCT(                                              \
+        TEMPLATE_PARAMS_SEQ,                                                    \
+        (BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME) \
+        TEMPLATE_PARAMS_SEQ,                                                    \
+        ATTRIBUTES)
+
+#define BOOST_FUSION_DEFINE_STRUCT(NAMESPACE_SEQ,NAME,ATTRIBUTES)               \
+    BOOST_FUSION_DEFINE_STRUCT_IMPL(                                            \
+        (0)NAMESPACE_SEQ,                                                       \
+        NAME,                                                                   \
+        BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END),       \
+        2)                                                                      \
+                                                                                \
+    BOOST_FUSION_ADAPT_STRUCT(                                                  \
+        BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME,  \
+        ATTRIBUTES)
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -1,7 +1,7 @@
 /*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
     Copyright (c) 2007 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)
@@ -15,6 +15,7 @@
 #include <boost/fusion/iterator/equal_to.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
 
 #include <boost/mpl/bool.hpp>
 
@@ -117,10 +118,7 @@
     struct unrolled_all<0>
     {
         template <typename It0, typename F>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(It0 const& it0, BOOST_FUSION_RREF_ELSE_OBJ(F) f)
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,9 +9,9 @@
 #ifndef BOOST_FUSION_ALGORITHM_QUERY_DETAIL_COUNT_HPP
 #define BOOST_FUSION_ALGORITHM_QUERY_DETAIL_COUNT_HPP
 
-#include <boost/config.hpp>
-#include <boost/mpl/or.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
 #include <boost/type_traits/is_convertible.hpp>
+#include <boost/mpl/or.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
@@ -35,10 +35,7 @@
     struct compare_convertible<false>
     {
         template <typename T1, typename T2>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(BOOST_FUSION_R_ELSE_CLREF(T1) x, BOOST_FUSION_R_ELSE_CLREF(T2) y)
         {
Added: sandbox/SOC/2009/fusion/boost/fusion/include/define_assoc_struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/include/define_assoc_struct.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -0,0 +1,13 @@
+/*=============================================================================
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_INCLUDE_DEFINE_ASSOC_STRUCT_HPP
+#define BOOST_FUSION_INCLUDE_DEFINE_ASSOC_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/include/define_struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/include/define_struct.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -0,0 +1,13 @@
+/*=============================================================================
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_INCLUDE_DEFINE_STRUCT_HPP
+#define BOOST_FUSION_INCLUDE_DEFINE_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/define_struct.hpp>
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,11 +9,10 @@
 #ifndef BOOST_FUSION_ITERATOR_EQUAL_TO_HPP
 #define BOOST_FUSION_ITERATOR_EQUAL_TO_HPP
 
-#include <boost/config.hpp>
 #include <boost/fusion/support/tag_of.hpp>
 #include <boost/fusion/support/is_iterator.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
-
+#include <boost/fusion/support/internal/constexpr.hpp>
 #include <boost/mpl/and.hpp>
 #include <boost/utility/enable_if.hpp>
 
@@ -51,10 +50,7 @@
     namespace iterator_operators
     {
         template <typename It1, typename It2>
-        inline
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        inline BOOST_FUSION_CONSTEXPR
         typename enable_if<
             mpl::and_<traits::is_iterator<It1>, traits::is_iterator<It2> >
           , bool
@@ -65,10 +61,7 @@
         }
 
         template <typename It1, typename It2>
-        inline
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        inline BOOST_FUSION_CONSTEXPR
         typename enable_if<
             mpl::and_<
                 traits::is_iterator<It1>
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/equal_to.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/equal_to.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,10 +9,10 @@
 #ifndef BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_EQUAL_TO_HPP
 #define BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_EQUAL_TO_HPP
 
-#include <boost/config.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
 
 #include <boost/mpl/bool.hpp>
 
@@ -25,10 +25,7 @@
         typedef typename result_of::end<Seq2Ref>::type end2_type;
 
         template <typename It1, typename It2>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(It1 const&, It2 const&, mpl::true_)
         {
@@ -57,10 +54,7 @@
     struct sequence_equal_to<Seq1Ref, Seq2Ref, false>
     {
         template <typename It1, typename It2>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(It1 const&, It2 const&)
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/greater.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/greater.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/greater.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,11 +9,11 @@
 #ifndef BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_GREATER_HPP
 #define BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_GREATER_HPP
 
-#include <boost/config.hpp>
-#include <boost/mpl/bool.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
+#include <boost/mpl/bool.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
@@ -24,10 +24,7 @@
         typedef typename result_of::end<Seq2>::type end2_type;
 
         template <typename It1, typename I2>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(It1 const&, I2 const&, mpl::true_)
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/greater_equal.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/greater_equal.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/greater_equal.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,11 +9,11 @@
 #ifndef BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_GREATER_EQUAL_HPP
 #define BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_GREATER_EQUAL_HPP
 
-#include <boost/config.hpp>
-#include <boost/mpl/bool.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
+#include <boost/mpl/bool.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
@@ -24,10 +24,7 @@
         typedef typename result_of::end<Seq2Ref>::type end2_type;
 
         template <typename It1, typename It2>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(It1 const&, It2 const&, mpl::true_)
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/less.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/less.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/less.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,11 +9,11 @@
 #ifndef BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_LESS_HPP
 #define BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_LESS_HPP
 
-#include <boost/config.hpp>
-#include <boost/mpl/bool.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
+#include <boost/mpl/bool.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
@@ -24,10 +24,7 @@
         typedef typename result_of::end<Seq2>::type end2_type;
 
         template <typename It1, typename It2>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(It1 const&, It2 const&, mpl::true_)
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/less_equal.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/less_equal.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/less_equal.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,11 +9,11 @@
 #ifndef BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_LESS_EQUAL_HPP
 #define BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_LESS_EQUAL_HPP
 
-#include <boost/config.hpp>
-#include <boost/mpl/bool.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
+#include <boost/mpl/bool.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
@@ -24,10 +24,7 @@
         typedef typename result_of::end<Seq2>::type end2_type;
 
         template <typename It1, typename It2>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(It1 const&, It2 const&, mpl::true_)
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/not_equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/not_equal_to.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/not_equal_to.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -9,11 +9,11 @@
 #ifndef BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_NOT_EQUAL_TO_HPP
 #define BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_NOT_EQUAL_TO_HPP
 
-#include <boost/config.hpp>
-#include <boost/mpl/bool.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
+#include <boost/mpl/bool.hpp>
 
 namespace boost { namespace fusion { namespace detail
 {
@@ -24,10 +24,7 @@
         typedef typename result_of::end<Seq2Ref>::type end2_type;
 
         template <typename It1, typename It2>
-        static
-#ifndef BOOST_NO_CONSTEXPR
-        constexpr
-#endif
+        static BOOST_FUSION_CONSTEXPR
         bool
         call(It1 const&, It2 const&, mpl::true_)
         {
Added: sandbox/SOC/2009/fusion/boost/fusion/support/internal/constexpr.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/constexpr.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -0,0 +1,18 @@
+/*=============================================================================
+    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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_SUPPORT_INTERNAL_CONSTEXPR_HPP
+#define BOOST_FUSION_SUPPORT_INTERNAL_CONSTEXPR_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_CONSTEXPR
+#   define BOOST_FUSION_CONSTEXPR
+#else
+#   define BOOST_FUSION_CONSTEXPR constexpr
+#endif
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp	2010-04-01 07:45:25 EDT (Thu, 01 Apr 2010)
@@ -12,6 +12,7 @@
 
 #include <boost/fusion/support/deduce.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/constexpr.hpp>
 #ifndef BOOST_NO_RVALUE_REFERENCES
 #   include <boost/fusion/support/internal/is_explicitly_convertible.hpp>
 #endif
@@ -43,6 +44,7 @@
 
 #undef BOOST_FUSION_PAIR_CTOR
 
+        BOOST_FUSION_CONSTEXPR
         pair()
           : second()
         {}