$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r63512 - in sandbox/SOC/2010/phoenix3: boost/phoenix boost/phoenix/bind boost/phoenix/core boost/phoenix/function boost/phoenix/fusion boost/phoenix/object boost/phoenix/operator boost/phoenix/statement libs/phoenix/test libs/phoenix/test/bind libs/phoenix/test/function libs/phoenix/test/object libs/phoenix/test/operator libs/phoenix/test/statement
From: thom.heller_at_[hidden]
Date: 2010-07-02 14:56:15
Author: theller
Date: 2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
New Revision: 63512
URL: http://svn.boost.org/trac/boost/changeset/63512
Log:
+ finished porting a whole bunch of stuff:
        - fusion
        - operator
        - statement (not complete: switch and try/catch)
        - object
+ some minor tweaks
+ reverted bind to fully rely on proto again (might break MSVC, further investigation needed)
Added:
   sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind_member_function.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/fusion/
   sandbox/SOC/2010/phoenix3/boost/phoenix/fusion.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/fusion/at.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/const_cast.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/construct.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/delete.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/dynamic_cast.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/if_else.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/new.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/reinterpret_cast.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/static_cast.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/if_else.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement/do_while.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement/for.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement/switch.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement/throw.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement/try_catch.hpp   (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement/while.hpp   (contents, props changed)
Text files modified: 
   sandbox/SOC/2010/phoenix3/boost/phoenix/bind.hpp                                |     3                                         
   sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind.hpp                           |    14 +-                                      
   sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind_member_variable.hpp           |    46 +++++++++-                              
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/compose.hpp                        |    11 +                                       
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/limits.hpp                         |    24 ++++-                                   
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/mem_obj_ptr.hpp                    |    97 ++++++++++++++++-------                 
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/reference.hpp                      |    20 +++-                                    
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/value.hpp                          |    14 ++-                                     
   sandbox/SOC/2010/phoenix3/boost/phoenix/function/function.hpp                   |     1                                         
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator.hpp                            |     3                                         
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement.hpp                           |     5 +                                       
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement/if.hpp                        |    22 ++--                                    
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/Jamfile                             |    14 +-                                      
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_function_object_tests.cpp |    26 +++--                                   
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_function_tests.cpp        |    21 ++--                                    
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_member_function_tests.cpp |    33 +++----                                 
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_member_variable_tests.cpp |    56 ++++++++-----                           
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/function/function_tests.cpp         |   163 ++++++++++++++++++++------------------- 
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/object/cast_tests.cpp               |    14 ++-                                     
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/object/new_delete_tests.cpp         |    21 +++-                                    
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/if_else_tests.cpp          |    24 ++--                                    
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/member.cpp                 |    14 +-                                      
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/statement/exceptions.cpp            |    20 ++-                                     
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/statement/loops_tests.cpp           |    31 +++++--                                 
   24 files changed, 423 insertions(+), 274 deletions(-)
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/bind.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/bind.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/bind.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -9,6 +9,7 @@
 
 #include <boost/phoenix/version.hpp>
 #include <boost/phoenix/bind/bind.hpp>
-#include <boost/phoenix/bind/bind_member_variable.hpp>
+//#include <boost/phoenix/bind/bind_member_function.hpp>
+//#include <boost/phoenix/bind/bind_member_variable.hpp>
 
 #endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -23,7 +23,8 @@
     ////////////////////////////////////////////////////////////////////////////
     
     template <typename F>
-    typename boost::result_of<function<F>()>::type const
+    //typename boost::result_of<function<F>()>::type const
+    typename result_of::function<F>::type const
     bind(F f)
     {
         return function<F>(f)();
@@ -41,14 +42,15 @@
 #else
     
     template <typename F, PHOENIX_typename_A>
-#if PHOENIX_ITERATION == 1
+/*#if PHOENIX_ITERATION == 1
     typename disable_if<
-        is_member_object_pointer<F>
+        is_member_pointer<F>
       , typename boost::result_of<function<F>(A0 const&)>::type const
       >::type
-#else
-    typename boost::result_of<function<F>(PHOENIX_A_const_ref)>::type const
-#endif
+#else*/
+    //typename boost::result_of<function<F>(PHOENIX_A_const_ref)>::type const
+    typename result_of::function<F, PHOENIX_A_const_ref>::type const
+//#endif
     bind(F f, PHOENIX_A_const_ref_a)
     {
         return function<F>(f)(PHOENIX_a);
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind_member_function.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind_member_function.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,154 @@
+/*==============================================================================
+    Copyright (c) 2005-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !PHOENIX_IS_ITERATING
+
+#ifndef PHOENIX_BIND_BIND_MEMBER_FUNCTION_HPP
+#define PHOENIX_BIND_BIND_MEMBER_FUNCTION_HPP
+
+#include <boost/phoenix/function.hpp>
+#include <boost/phoenix/core/reference.hpp>
+#include <boost/phoenix/support/iterate.hpp>
+
+namespace boost { namespace phoenix
+{
+    template <typename RT, typename ClassT, typename ClassA>
+    typename result_of::function<
+        RT(ClassT::*)()
+      , ClassA// const&
+    >::type
+    bind(RT(ClassT::*f)(), ClassA /*const&*/ obj)
+    {
+        return function<RT(ClassT::*)()>(f)(obj);
+    }
+
+    template <typename RT, typename ClassT, typename ClassA>
+    typename result_of::function<
+        RT(ClassT::*)() const
+      , ClassA// const&
+    >::type
+    bind(RT(ClassT::*f)() const, ClassA /*const&*/ obj)
+    {
+        return function<RT(ClassT::*)() const>(f)(obj);
+    }
+
+    /*
+    template <typename RT, typename ClassT>
+    typename result_of::function<
+        RT(ClassT::*)()
+      , ClassT//&//typename make_reference<ClassT>::type const
+    >::type
+    bind(RT(ClassT::*f)(), ClassT& obj)
+    {
+        return function<RT(ClassT::*)()>(f)(obj);//ref(obj));
+    }
+
+    template <typename RT, typename ClassT>
+    typename result_of::function<
+        RT(ClassT::*)() const
+      , ClassT//&//typename make_reference<ClassT>::type const
+    >::type
+    bind(RT(ClassT::*f)() const, ClassT& obj)
+    {
+        return function<RT(ClassT::*)() const>(f)(obj);//ref(obj));
+    }
+    */
+
+#define PHOENIX_ITERATION_PARAMS                                                \
+    (3, (1, PHOENIX_ARG_LIMIT,                                                  \
+    <boost/phoenix/bind/bind_member_function.hpp>))
+#include PHOENIX_ITERATE()
+
+}}
+
+#endif
+
+#else
+    
+    template <
+        typename RT
+      , typename ClassT
+      , BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename T)
+      , typename ClassA
+      , PHOENIX_typename_A>
+    typename result_of::function<
+        RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T))
+      , ClassA const&
+      , PHOENIX_A_const_ref
+    >::type
+    bind(
+        RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T))
+      , ClassA const& obj
+      , PHOENIX_A_const_ref_a)
+    {
+        return function<
+            RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T))>(f)(
+                obj, PHOENIX_a);
+    }
+
+    template <
+        typename RT
+      , typename ClassT
+      , BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename T)
+      , typename ClassA
+      , PHOENIX_typename_A>
+    typename result_of::function<
+        RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T)) const
+      , ClassA const&
+      , PHOENIX_A_const_ref
+    >::type
+    bind(
+        RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T)) const
+      , ClassA const& obj
+      , PHOENIX_A_const_ref_a)
+    {
+        return function<
+            RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T)) const>(f)(
+                obj, PHOENIX_a);
+    }
+
+    template <
+        typename RT
+      , typename ClassT
+      , BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename T)
+      , PHOENIX_typename_A>
+    typename result_of::function<
+        RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T))
+      , typename make_reference<ClassT>::type const
+      , PHOENIX_A_const_ref
+    >::type
+    bind(
+        RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T))
+      , ClassT& obj
+      , PHOENIX_A_const_ref_a)
+    {
+        return function<
+            RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T))>(f)(
+                ref(obj), PHOENIX_a);
+    }
+
+    template <
+        typename RT
+      , typename ClassT
+      , BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename T)
+      , PHOENIX_typename_A>
+    typename result_of::function<
+        RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T)) const
+      , typename make_reference<ClassT>::type const
+      , PHOENIX_A_const_ref
+    >::type
+    bind(
+        RT(ClassT::*f)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T)) const
+      , ClassT& obj
+      , PHOENIX_A_const_ref_a)
+    {
+        return function<RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, T)) const>(f)(
+            ref(obj), PHOENIX_a);
+    }
+
+#endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind_member_variable.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind_member_variable.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind_member_variable.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -16,17 +16,47 @@
     ////////////////////////////////////////////////////////////////////////////
     // Bind - overload for member object pointers
     ////////////////////////////////////////////////////////////////////////////
+    
 
-    template <typename MemPtr, typename Object>
-    typename enable_if<
-        is_member_object_pointer<MemPtr>
-      , typename make_mem_obj_ptr<Object, MemPtr>::type const
-      >::type
-    bind( MemPtr ptr, Object const& obj)
+    template <typename RT, typename ClassT, typename ClassA>
+    /*typename enable_if<
+        is_actor<ClassA>
+      ,*/ typename result_of::function<
+            RT ClassT::* //detail::member_variable<RT, RT ClassT::*>
+          , ClassA //const &
+        >::type
+    //>::type
+    bind(RT ClassT::*mp, ClassA /*const&*/ obj)
     {
-        return make_mem_obj_ptr<Object, MemPtr>()(obj, ptr);
+        /*typedef detail::member_variable<RT, RT ClassT::*> mp_type;
+        return function<mp_type>(mp_type(mp))(obj);*/
+        return function<RT ClassT::*>(mp)(obj);
     }
-
+    /*
+    template <typename RT, typename ClassT, typename ClassA>
+    typename disable_if<
+        is_actor<ClassA>
+      , typename result_of::function<
+            detail::member_variable<RT, RT ClassT::*>
+          , typename make_reference<ClassA const>::type const
+        >::type
+    >::type
+    bind(RT ClassT::*mp, ClassA const& obj)
+    {
+        typedef detail::member_variable<RT, RT ClassT::*> mp_type;
+        return function<mp_type>(mp_type(mp))(cref(obj));
+    }
+    
+    template <typename RT, typename ClassT>
+    typename result_of::function<
+        detail::member_variable<RT, RT ClassT::*>
+      , typename make_reference<ClassT>::type const
+    >::type
+    bind(RT ClassT::*mp, ClassT & obj)
+    {
+        typedef detail::member_variable<RT, RT ClassT::*> mp_type;
+        return function<mp_type>(mp_type(mp))(ref(obj));
+    }*/
 }}
 
 #endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/compose.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/compose.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/compose.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -19,6 +19,8 @@
 #include <boost/proto/tags.hpp>
 #include <boost/proto/make_expr.hpp>
 
+namespace foo { template< typename T > struct wrap{}; }
+
 namespace boost { namespace phoenix
 {
     ////////////////////////////////////////////////////////////////////////////
@@ -56,7 +58,7 @@
         typedef Actor<base_type> result_type;
         typedef result_type type;
 
-        result_type
+        result_type const
         operator()() const
         {
             actor<base_type> const e = {{{funcwrap<F>()}, {env()}}};
@@ -89,7 +91,7 @@
         typedef Actor<base_type> result_type;
         typedef result_type type;
 
-        result_type
+        result_type const
         operator()(
             BOOST_PP_ENUM_BINARY_PARAMS(
                 PHOENIX_ITERATION,
@@ -97,7 +99,10 @@
         {
 #if PHOENIX_ITERATION == 1
             // silence gcc warnings
-            actor<base_type> const e = {{{funcwrap<F>()}, {env()}, {a0}}};
+            //actor<base_type> const e = {{{funcwrap<F>()}, {env()}, {a0}}};
+            actor<base_type> const e = {{{funcwrap<F>()}, {env()}, a0}};
+#elif PHOENIX_ITERATION == 2
+            actor<base_type> const e = {{{funcwrap<F>()}, {env()}, a0, a1}};
 #else
             actor<base_type> const e = {{{funcwrap<F>()}, {env()}, PHOENIX_a}};
 #endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/limits.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/limits.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/limits.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -7,10 +7,12 @@
 #ifndef PHOENIX_CORE_LIMITS_HPP
 #define PHOENIX_CORE_LIMITS_HPP
 
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/inc.hpp>
 #include <boost/preprocessor/dec.hpp>
 
 #if !defined(PHOENIX_LIMIT)
-# define PHOENIX_LIMIT 5
+# define PHOENIX_LIMIT 10
 #elif (PHOENIX_LIMIT < 5)
 # error "PHOENIX_LIMIT is set too low"
 #endif
@@ -38,14 +40,13 @@
 #endif
 
 #if !defined(PHOENIX_COMPOSITE_LIMIT)
-# define PHOENIX_COMPOSITE_LIMIT 3
-#elif (PHOENIX_COMPOSITE_LIMIT < 3)
+# define PHOENIX_COMPOSITE_LIMIT PHOENIX_LIMIT
+#elif (PHOENIX_COMPOSITE_LIMIT < 5)
 # error "PHOENIX_COMPOSITE_LIMIT is set too low"
 #endif
 
 #if !defined(PHOENIX_MEMBER_LIMIT)
-# define PHOENIX_MEMBER_LIMIT 3
-//BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT))
+# define PHOENIX_MEMBER_LIMIT BOOST_PP_DEC(BOOST_PP_DEC(PHOENIX_COMPOSITE_LIMIT))
 #elif (PHOENIX_MEMBER_LIMIT > PHOENIX_COMPOSITE_LIMIT)
 # error "PHOENIX_MEMBER_LIMIT > PHOENIX_COMPOSITE_LIMIT"
 #elif (PHOENIX_MEMBER_LIMIT < 3)
@@ -85,4 +86,17 @@
 // detail/type_deduction.hpp compile. $$$ TODO: Investigate further $$$
 #include <boost/mpl/vector/vector20.hpp>
 
+#if !defined(BOOST_PROTO_MAX_ARITY)
+#define BOOST_PROTO_MAX_ARITY BOOST_PP_INC(PHOENIX_COMPOSITE_LIMIT)
+#ifdef BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#undef BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#endif
+#define BOOST_MPL_LIMIT_METAFUNCTION_ARITY BOOST_PP_INC(BOOST_PROTO_MAX_ARITY)
+#elif (BOOST_PROTO_MAX_ARITY < BOOST_PP_INC(PHOENIX_COMPOSE_LIMIT))
+#error "BOOST_PROTO_MAX_ARITY < PHOENIX_COMPOSE_LIMIT + 1"
+#endif
+
+// this include will set the limit for the proto expression arity
+#include <boost/proto/proto_fwd.hpp>
+
 #endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/mem_obj_ptr.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/mem_obj_ptr.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/mem_obj_ptr.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -11,9 +11,12 @@
 #include <boost/phoenix/core/compose.hpp>
 #include <boost/phoenix/core/meta_grammar.hpp>
 #include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
 #include <boost/type_traits/remove_reference.hpp>
 
+#include <boost/type_traits/remove_reference.hpp>
+
+
 namespace boost { namespace phoenix
 {
     ////////////////////////////////////////////////////////////////////////////
@@ -36,7 +39,7 @@
         };
         
         template <typename Class, typename MemberType>
-        struct member_type<MemberType (Class::* &)>
+        struct member_type<MemberType (Class::*&)>
         {
             typedef MemberType type;
         };
@@ -49,32 +52,12 @@
 
         template <typename T> 
         struct object_type;
-
-        template <typename T>
-        struct object_type<T*>
-        {
-            typedef T type;
-        };
-
-        /*
-        template <typename T>
-        struct object_type<shared_ptr<T> >
-        {
-            typedef T type;
-        };
         
         template <typename T>
-        struct object_type<scoped_ptr<T> >
-        {
-            typedef T type;
-        };
-
-        template <typename T>
-        struct object_type<std::auto_ptr<T> >
+        struct object_type<T*>
         {
             typedef T type;
         };
-        */
     }
 
     namespace result_of
@@ -87,22 +70,25 @@
                 typename remove_const<
                     typename remove_reference<
                         typename boost::result_of<
-                            eval_grammar(Object const&, Env&)>::type
+                            eval_grammar(Object const&, Env&)
                         >::type
                     >::type
-                >::type object_type;
+                >::type
+            >::type object_type;
 
             typedef typename meta::member_type<
                 typename boost::result_of<
-                    eval_grammar(MemPtr const&, Env&)>::type
-                >::type member_type;
+                    eval_grammar(MemPtr const&, Env&)
+                >::type
+            >::type member_type;
 
             typedef typename add_reference<
                 typename mpl::eval_if<
                     is_const<object_type>
                   , add_const<member_type>
-                  , mpl::identity<member_type> >::type
-                >::type type;
+                  , mpl::identity<member_type>
+                >::type
+            >::type type;
         };
     }
 
@@ -127,6 +113,59 @@
     template <typename Object, typename MemPtr>
     struct make_mem_obj_ptr : compose<mem_obj_ptr, Object, MemPtr> {};
 
+    namespace detail
+    {
+        template <typename RT, typename MP>
+        struct member_variable
+        {
+            template <typename Sig>
+            struct result;
+
+            template <typename This, typename Class>
+            struct result<This(Class)>
+            {
+                typedef typename boost::mpl::if_<
+                    boost::is_const<
+                        typename boost::remove_pointer<
+                            typename boost::remove_reference<Class>::type
+                        >::type
+                    >
+                  , const RT&
+                  , RT&
+                >::type type;
+            };
+
+            member_variable(MP mp)
+                : mp(mp) {}
+
+            template <typename Class>
+            RT& operator()(Class& obj) const
+            {
+                return obj.*mp;
+            };
+
+            template <typename Class>
+            RT& operator()(Class* obj) const
+            {
+                return obj->*mp;
+            };
+
+            template <typename Class>
+            RT const& operator()(Class const& obj) const
+            {
+                return obj.*mp;
+            };
+
+            template <typename Class>
+            RT const& operator()(Class const* obj) const
+            {
+                return obj->*mp;
+            };
+
+            MP mp;
+
+        };
+    }
 
 }}
 
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/reference.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/reference.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/reference.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -26,8 +26,11 @@
     namespace result_of
     {
         template <typename Env, typename T>
-        struct reference
-            : boost::result_of<eval_grammar(T&)>
+        struct reference;
+
+        template <typename Env, typename T>
+        struct reference<Env, T const&>
+            : boost::result_of<eval_grammar(T const&)>
         {};
     }
     
@@ -37,13 +40,13 @@
         struct result;
 
         template <typename This, typename Env, typename T>
-        struct result<This(Env&, T&)>
-            : result_of::reference<Env, T>
+        struct result<This(Env&, T const&)>
+            : result_of::reference<Env, T const&>
         {};
 
         template <typename Env, typename T>
-        typename result_of::reference<Env, T>::type
-        operator()(Env& env, T& ref) const
+        typename result_of::reference<Env, T const&>::type
+        operator()(Env& env, T const& ref) const
         {
             return eval(ref);
         }
@@ -51,6 +54,9 @@
     
     template <typename T>
     struct make_reference : compose<reference, T&> {};
+    
+    template <typename T>
+    struct make_reference<T const> : compose<reference, T const&> {};
 
     template <typename T>
     typename make_reference<T>::type const
@@ -61,7 +67,7 @@
 
     template <typename T>
     typename make_reference<T const>::type const
-    cref(T& t)
+    cref(T const& t)
     {
         return make_reference<T const>()(t);
     }
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/value.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/value.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/value.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -27,16 +27,12 @@
     {
         template <typename Env, typename T>
         struct value
-            : boost::result_of<eval_grammar(T)>
+            : boost::result_of<eval_grammar(T const&)>
         {};
     }
 
     struct value
     {
-        template<typename T>
-        struct compose : phoenix::compose<value, T>
-        {};
-
         template<typename Sig>
         struct result;
 
@@ -63,6 +59,14 @@
         return make_value<T>()(t);
     }
 
+    template<typename T>
+    typename make_value<T>::type const
+    val(T & t )
+    {
+        std::cout << "blubber\n";
+        return make_value<T>()(t);
+    }
+
 }}
 
 #endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/function/function.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/function/function.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/function/function.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -14,6 +14,7 @@
 #include <boost/phoenix/core/domain.hpp>
 #include <boost/phoenix/core/limits.hpp>
 #include <boost/phoenix/support/iterate.hpp>
+#include <boost/fusion/sequence/intrinsic/at_c.hpp>
 #include <boost/proto/make_expr.hpp>
 #include <boost/proto/tags.hpp>
 #include <boost/utility/result_of.hpp>
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/fusion.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/fusion.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,13 @@
+/*==============================================================================
+    Copyright (c) 2005-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_FUSION_HPP
+#define PHOENIX_FUSION_HPP
+
+#include <boost/phoenix/fusion.hpp>
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/fusion/at.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/fusion/at.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,72 @@
+/*==============================================================================
+    Copyright (c) 2005-2008 Hartmut Kaiser
+    Copyright (c) 2005-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_FUSION_AT_HPP
+#define PHOENIX_FUSION_AT_HPP
+
+#include <boost/fusion/include/at.hpp>
+#include <boost/phoenix/core/actor.hpp>
+#include <boost/phoenix/core/compose.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename Tuple, int N>
+        struct at
+            : fusion::result_of::at_c<
+                typename remove_reference<
+                    boost::result_of<
+                        eval_grammar(Tuple const&, Env&)
+                    >::type
+                >
+              , N
+            >
+        {};
+    }
+
+    template <int N>
+    struct at_eval
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Env, typename Tuple>
+        struct result<This(Env&, Tuple const&)>
+            : result_of::at<Env, Tuple, N>
+        {};
+
+        template <typename Env, typename Tuple>
+        typename result_of::at<Env, Tuple, N>::type
+        operator()(Env& env, Tuple const& tuple) const
+        {
+            return fusion::at_c<N>(eval(tuple, env));
+        }
+    };
+
+    template <int N, typename Tuple>
+    struct make_at : compose<at_eval<N>, Tuple> {};
+
+    template <int N, typename Tuple>
+    typename make_at<N, Tuple>::type const
+    at_c(Tuple const& tuple)
+    {
+        return make_at<N, Tuple>()(tuple);
+    }
+
+    template <typename N, typename Tuple>
+    typename make_at<N::value, Tuple>::type const
+    at(Tuple const& tuple)
+    {
+        return make_at<N::value, Tuple>()(tuple);
+    }
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,19 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_OBJECT_HPP
+#define PHOENIX_OBJECT_HPP
+
+#include <boost/phoenix/object/const_cast.hpp>
+#include <boost/phoenix/object/construct.hpp>
+#include <boost/phoenix/object/delete.hpp>
+#include <boost/phoenix/object/dynamic_cast.hpp>
+#include <boost/phoenix/object/new.hpp>
+#include <boost/phoenix/object/reinterpret_cast.hpp>
+#include <boost/phoenix/object/static_cast.hpp>
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object/const_cast.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/const_cast.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,47 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_OBJECT_CONST_CAST_HPP
+#define PHOENIX_OBJECT_CONST_CAST_HPP
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename T, typename U>
+        struct const_cast_
+        {
+            typedef T type;
+        };
+    }
+
+    template <typename T>
+    struct const_cast_eval
+    {
+        typedef T result_type;
+
+        template <typename Env, typename U>
+        result_type
+        operator()(Env& env, U const& u)
+        {
+            return const_cast<T>(eval(u, env));
+        }
+    };
+
+    template <typename T, typename U>
+    struct make_const_cast : compose<const_cast_eval<T>, U> {};
+
+    template <typename T, typename U>
+    typename make_const_cast<T, U>::type const
+    const_cast_(U const& u)
+    {
+        return make_const_cast<T, U>()(u);
+    }
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object/construct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/construct.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,91 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !PHOENIX_IS_ITERATING
+
+#ifndef PHOENIX_OBJECT_CONSTRUCT_HPP
+#define PHOENIX_OBJECT_CONSTRUCT_HPP
+
+#include <boost/phoenix/support/iterate.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename T, PHOENIX_typename_A_void(PHOENIX_COMPOSITE_LIMIT)>
+        struct construct
+        {
+            typedef T type;
+        };
+    }
+
+    template <typename T>
+    struct construct_eval
+    {
+        typedef T result_type;
+
+        template <typename Env>
+        result_type
+        operator()(Env& env) const
+        {
+            return T();
+        }
+
+#define PHOENIX_ITERATION_PARAMS                                                \
+        (4, (1, PHOENIX_COMPOSITE_LIMIT,                                        \
+        <boost/phoenix/object/construct.hpp>,                                   \
+        PHOENIX_ITERATE_OPERATOR))
+#include PHOENIX_ITERATE()
+    };
+
+    template <typename T, PHOENIX_typename_A_void(PHOENIX_COMPOSITE_LIMIT)>
+    struct make_construct : compose<construct_eval<T>, PHOENIX_A(PHOENIX_COMPOSITE_LIMIT)>
+    {};
+
+    template <typename T>
+    typename make_construct<T>::type const
+    construct()
+    {
+        make_construct<T>()();
+    }
+
+#define PHOENIX_ITERATION_PARAMS                                                \
+        (3, (1, PHOENIX_COMPOSITE_LIMIT,                                        \
+        <boost/phoenix/object/construct.hpp>))
+#include PHOENIX_ITERATE()
+}}
+
+#endif
+
+#else
+
+#if BOOST_PP_ITERATION_FLAGS() == PHOENIX_ITERATE_OPERATOR
+
+        template <typename Env, PHOENIX_typename_A>
+        result_type
+        operator()(Env& env, PHOENIX_A_const_ref_a) const
+        {
+#define EVAL_a(_,n,__) \
+            BOOST_PP_COMMA_IF(n) eval(a ## n, env)
+
+            return T(BOOST_PP_REPEAT(PHOENIX_ITERATION, EVAL_a, _));
+#undef EVAL_a
+        }
+
+#else
+
+    template <typename T, PHOENIX_typename_A>
+    typename make_construct<T, PHOENIX_A>::type const
+    construct(PHOENIX_A_const_ref_a)
+    {
+        return make_construct<T, PHOENIX_A>()(PHOENIX_a);
+    }
+
+#endif
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object/delete.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/delete.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,47 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_OBJECT_DELETE_HPP
+#define PHOENIX_OBJECT_DELETE_HPP
+
+namespace boost { namespace phoenix
+{
+
+    namespace result_of
+    {
+        template <typename Env, typename P>
+        struct delete_
+        {
+            typedef void type;
+        };
+    }
+
+    struct delete_eval
+    {
+        typedef void result_type;
+
+        template <typename Env, typename P>
+        result_type
+        operator()(Env& env, P const& p) const
+        {
+            return delete eval(p, env);
+        }
+    };
+
+    template <typename P>
+    struct make_delete : compose<delete_eval, P> {};
+
+    template <typename P>
+    typename make_delete<P>::type const
+    delete_(P const& p)
+    {
+        return make_delete<P>()(p);
+    }
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object/dynamic_cast.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/dynamic_cast.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,47 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_OBJECT_DYNAMIC_CAST_HPP
+#define PHOENIX_OBJECT_DYNAMIC_CAST_HPP
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename T, typename U>
+        struct dynamic_cast_
+        {
+            typedef T type;
+        };
+    }
+
+    template <typename T>
+    struct dynamic_cast_eval
+    {
+        typedef T result_type;
+
+        template <typename Env, typename U>
+        result_type
+        operator()(Env& env, U const& u)
+        {
+            return dynamic_cast<T>(eval(u, env));
+        }
+    };
+
+    template <typename T, typename U>
+    struct make_dynamic_cast : compose<dynamic_cast_eval<T>, U> {};
+
+    template <typename T, typename U>
+    typename make_dynamic_cast<T, U>::type const
+    dynamic_cast_(U const& u)
+    {
+        return make_dynamic_cast<T, U>()(u);
+    }
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object/if_else.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/if_else.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,67 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_OBJECT_IF_ELSE_HPP
+#define PHOENIX_OBJECT_IF_ELSE_HPP
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename Cond, typename Then, typename Else>
+        struct if_else
+        {
+            typedef typename boost::result_of<eval_grammar(Then const&, Env&)>::type then_type;
+            typedef typename boost::result_of<eval_grammar(Else const&, Env&)>::type else_type;
+
+            typedef typename
+                mpl::if_<
+                    mpl::and_<
+                        is_same<then_type, else_type>
+                      , is_reference<then_type>
+                    >
+                  , then_type
+                  , typename remove_reference<then_type>::type
+                >::type
+                type;
+        };
+    }
+
+    struct if_else_
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Env, typename Cond, typename Then, typename Else>
+        struct result<This(Env&, Cond const&, Then const&, Else const&)>
+            : result_of::if_else<Env, Cond, Then, Else>
+        {};
+
+
+        template <typename Env, typename Cond, typename Then, typename Else>
+        typename result_of::if_else<Env, Cond, Then, Else>::type
+        operator()(Env& env, Cond const& cond, Then const& then, Else const& else_) const
+        {
+            return eval(cond, env) ? eval(then, env) : eval(else_, env);
+        }
+    };
+
+
+    template <typename Cond, typename Then, typename Else>
+    struct make_if_else : compose<if_else_, Cond, Then, Else> {};
+
+    template <typename Cond, typename Then, typename Else>
+    typename make_if_else<Cond, Then, Else>::type
+    if_else(Cond const & cond, Then const & then, Else const& else_)
+    {
+        return make_if_else<Cond, Then, Else>()(cond, then, else_);
+    }
+
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object/new.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/new.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,91 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !PHOENIX_IS_ITERATING
+
+#ifndef PHOENIX_OBJECT_NEW_HPP
+#define PHOENIX_OBJECT_NEW_HPP
+
+#include <boost/phoenix/support/iterate.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename T, PHOENIX_typename_A_void(PHOENIX_COMPOSITE_LIMIT)>
+        struct new_
+        {
+            typedef T* type;
+        };
+    }
+
+    template <typename T>
+    struct new_eval
+    {
+        typedef T* result_type;
+
+        template <typename Env>
+        result_type
+        operator()(Env& env) const
+        {
+            return new T;
+        }
+
+#define PHOENIX_ITERATION_PARAMS                                                \
+        (4, (1, PHOENIX_COMPOSITE_LIMIT,                                        \
+        <boost/phoenix/object/new.hpp>,                                   \
+        PHOENIX_ITERATE_OPERATOR))
+#include PHOENIX_ITERATE()
+    };
+
+    template <typename T, PHOENIX_typename_A_void(PHOENIX_COMPOSITE_LIMIT)>
+    struct make_new : compose<new_eval<T>, PHOENIX_A(PHOENIX_COMPOSITE_LIMIT)>
+    {};
+
+    template <typename T>
+    typename make_new<T>::type const
+    new_()
+    {
+        make_new<T>()();
+    }
+
+#define PHOENIX_ITERATION_PARAMS                                                \
+        (3, (1, PHOENIX_COMPOSITE_LIMIT,                                        \
+        <boost/phoenix/object/new.hpp>))
+#include PHOENIX_ITERATE()
+}}
+
+#endif
+
+#else
+
+#if BOOST_PP_ITERATION_FLAGS() == PHOENIX_ITERATE_OPERATOR
+
+        template <typename Env, PHOENIX_typename_A>
+        result_type
+        operator()(Env& env, PHOENIX_A_const_ref_a) const
+        {
+#define EVAL_a(_,n,__) \
+            BOOST_PP_COMMA_IF(n) eval(a ## n, env)
+
+            return new T(BOOST_PP_REPEAT(PHOENIX_ITERATION, EVAL_a, _));
+#undef EVAL_a
+        }
+
+#else
+
+    template <typename T, PHOENIX_typename_A>
+    typename make_new<T, PHOENIX_A>::type const
+    new_(PHOENIX_A_const_ref_a)
+    {
+        return make_new<T, PHOENIX_A>()(PHOENIX_a);
+    }
+
+#endif
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object/reinterpret_cast.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/reinterpret_cast.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,47 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_OBJECT_REINTERPRET_CAST_HPP
+#define PHOENIX_OBJECT_REINTERPRET_CAST_HPP
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename T, typename U>
+        struct reinterpret_cast_
+        {
+            typedef T type;
+        };
+    }
+
+    template <typename T>
+    struct reinterpret_cast_eval
+    {
+        typedef T result_type;
+
+        template <typename Env, typename U>
+        result_type
+        operator()(Env& env, U const& u)
+        {
+            return reinterpret_cast<T>(eval(u, env));
+        }
+    };
+
+    template <typename T, typename U>
+    struct make_reinterpret_cast : compose<reinterpret_cast_eval<T>, U> {};
+
+    template <typename T, typename U>
+    typename make_reinterpret_cast<T, U>::type const
+    reinterpret_cast_(U const& u)
+    {
+        return make_reinterpret_cast<T, U>()(u);
+    }
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/object/static_cast.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/static_cast.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,47 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_OBJECT_STATIC_CAST_HPP
+#define PHOENIX_OBJECT_STATIC_CAST_HPP
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename T, typename U>
+        struct static_cast_
+        {
+            typedef T type;
+        };
+    }
+
+    template <typename T>
+    struct static_cast_eval
+    {
+        typedef T result_type;
+
+        template <typename Env, typename U>
+        result_type
+        operator()(Env& env, U const& u)
+        {
+            return static_cast<T>(eval(u, env));
+        }
+    };
+
+    template <typename T, typename U>
+    struct make_static_cast : compose<static_cast_eval<T>, U> {};
+
+    template <typename T, typename U>
+    typename make_static_cast<T, U>::type const
+    static_cast_(U const& u)
+    {
+        return make_static_cast<T, U>()(u);
+    }
+
+}}
+
+#endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/operator.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/operator.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -9,7 +9,8 @@
 
 #include <boost/phoenix/version.hpp>
 #include <boost/phoenix/operator/operator.hpp>
+#include <boost/phoenix/operator/if_else.hpp>
 #include <boost/phoenix/operator/io.hpp>
-#include <boost/phoenix/operator/member.hpp>
+//#include <boost/phoenix/operator/member.hpp>
 
 #endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/if_else.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/if_else.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,65 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_OBJECT_IF_ELSE_HPP
+#define PHOENIX_OBJECT_IF_ELSE_HPP
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename Cond, typename Then, typename Else>
+        struct if_else
+        {
+            typedef typename boost::result_of<eval_grammar(Then const&, Env&)>::type then_type;
+            typedef typename boost::result_of<eval_grammar(Else const&, Env&)>::type else_type;
+
+            typedef typename
+                mpl::if_<
+                    mpl::and_<
+                        is_same<then_type, else_type>
+                      , is_reference<then_type>
+                    >
+                  , then_type
+                  , typename remove_reference<then_type>::type
+                >::type
+                type;
+        };
+    }
+
+    struct if_else_
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Env, typename Cond, typename Then, typename Else>
+        struct result<This(Env&, Cond const&, Then const&, Else const&)>
+            : boost::phoenix::result_of::if_else<Env, Cond, Then, Else>
+        {};
+
+
+        template <typename Env, typename Cond, typename Then, typename Else>
+        typename result_of::if_else<Env, Cond, Then, Else>::type
+        operator()(Env& env, Cond const& cond, Then const& then, Else const& else_) const
+        {
+            return eval(cond, env) ? eval(then, env) : eval(else_, env);
+        }
+    };
+
+
+    template <typename Cond, typename Then, typename Else>
+    struct make_if_else : compose<if_else_, Cond, Then, Else> {};
+
+    template <typename Cond, typename Then, typename Else>
+    typename make_if_else<Cond, Then, Else>::type const
+    if_else(Cond const & cond, Then const & then, Else const& else_)
+    {
+        return make_if_else<Cond, Then, Else>()(cond, then, else_);
+    }
+}}
+
+#endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/statement.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/statement.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -8,6 +8,11 @@
 #define PHOENIX_STATEMENT_HPP
 
 #include <boost/phoenix/version.hpp>
+#include <boost/phoenix/statement/do_while.hpp>
+#include <boost/phoenix/statement/for.hpp>
 #include <boost/phoenix/statement/if.hpp>
+#include <boost/phoenix/statement/throw.hpp>
+#include <boost/phoenix/statement/try_catch.hpp>
+#include <boost/phoenix/statement/while.hpp>
 
 #endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/statement/do_while.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement/do_while.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,71 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_STATEMENT_DO_WHILE_HPP
+#define PHOENIX_STATEMENT_DO_WHILE_HPP
+
+#include <boost/phoenix/core/compose.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename Cond, typename Do>
+        struct do_while
+        {
+            typedef void type;
+        };
+    }
+
+    struct do_while_eval
+    {
+        typedef void result_type;
+
+        template <typename Env, typename Cond, typename Do>
+        result_type
+        operator()(Env& env, Cond const& cond, Do const& do_) const
+        {
+            do
+                eval(do_, env);
+            while (eval(cond, env));
+        }
+    };
+
+    template <typename Cond, typename Do>
+    struct make_do_while : compose<do_while_eval, Cond, Do> {};
+
+    template <typename Do>
+    struct do_while_gen
+    {
+        do_while_gen(Do const& do_)
+            : do_(do_) {}
+
+        template <typename Cond>
+        typename make_do_while<Cond, Do>::type const
+        while_(Cond const& cond) const
+        {
+            return make_do_while<Cond, Do>()(cond, do_);
+        }
+
+        Do do_;
+    };
+
+    struct do_gen
+    {
+        template <typename Do>
+        do_while_gen<Do> const
+        operator[](Do const& do_) const
+        {
+            return do_while_gen<Do>(do_);
+        }
+    };
+
+    do_gen const do_ = do_gen();
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/statement/for.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement/for.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,83 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_STATEMENT_FOR_HPP
+#define PHOENIX_STATEMENT_FOR_HPP
+
+#include <boost/phoenix/core/compose.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <
+            typename Env
+          , typename Init
+          , typename Cond
+          , typename Step
+          , typename Do>
+        struct for_
+        {
+            typedef void type;
+        };
+
+    }
+
+    struct for_eval
+    {
+        typedef void result_type;
+
+        template <
+            typename Env
+          , typename Init
+          , typename Cond
+          , typename Step
+          , typename Do>
+        result_type
+        operator()(
+            Env& env
+          , Init const& init
+          , Cond const& cond
+          , Step const& step
+          , Do const& do_) const
+        {
+            for(eval(init, env); eval(cond, env); eval(step, env))
+                eval(do_, env);
+        }
+    };
+    
+    template <typename Init, typename Cond, typename Step, typename Do>
+    struct make_for : compose<for_eval, Init, Cond, Step, Do> {};
+
+    template <typename Init, typename Cond, typename Step>
+    struct for_gen
+    {
+        for_gen(Init const& init, Cond const& cond, Step const& step)
+            : init(init), cond(cond), step(step) {}
+
+        template <typename Do>
+        typename make_for<Init, Cond, Step, Do>::type const
+        operator[](Do const& do_) const
+        {
+            return make_for<Init, Cond, Step, Do>()(init, cond, step, do_);
+        }
+
+        Init init;
+        Cond cond;
+        Step step;
+    };
+
+    template <typename Init, typename Cond, typename Step>
+    for_gen<Init, Cond, Step> const
+    for_(Init const& init, Cond const& cond, Step const& step)
+    {
+        return for_gen<Init, Cond, Step>(init, cond, step);
+    }
+
+}}
+
+#endif
Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/statement/if.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/statement/if.hpp	(original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement/if.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -45,6 +45,9 @@
         }
     };
 
+    template <typename Cond, typename Then, typename Else>
+    struct make_if_else_s : compose<if_else_eval, Cond, Then, Else> {};
+
     // Function for evaluating lambdas like: if_( foo )[ bar ]
     struct if_eval
     {
@@ -63,19 +66,15 @@
     template<typename Cond, typename Then>
     struct else_gen
     {
-        template<typename Else>
-        struct compose : phoenix::compose<if_else_eval, Cond, Then, Else>
-        {};
-
         else_gen(Cond const & cond, Then const & then)
             : cond( cond )
             , then( then ) {}
 
         template<typename Else>
-        typename compose< Else >::result_type
+        typename make_if_else_s<Cond, Then, Else>::type const
         operator[](Else const & else_) const
         {
-            return compose< Else >()(cond, then, else_);
+            return make_if_else_s<Cond, Then, Else>()(cond, then, else_);
         }
 
         Cond const & cond;
@@ -100,22 +99,21 @@
         else_gen<cond_type, then_type> else_;
     };
 
+    template <typename Cond, typename Then>
+    struct make_if : compose_ex<if_eval, if_actor, Cond, Then> {};
+
     // Generator for if( cond )[ then ] branch.
     template<typename Cond>
     struct if_gen
     {
-        template<typename Then>
-        struct compose : phoenix::compose_ex<if_eval, if_actor, Cond, Then>
-        {};
-
         if_gen(Cond const & cond)
             : cond( cond ) {}
 
         template<typename Then>
-        typename compose<Then>::result_type
+        typename make_if<Cond, Then>::type const
         operator[](Then const & then) const
         {
-            return compose<Then>()(cond, then);
+            return make_if<Cond, Then>()(cond, then);
         }
 
         Cond const & cond;
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/statement/switch.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement/switch.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,155 @@
+/*==============================================================================
+    Copyright (c) 2005-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_STATEMENT_SWITCH_HPP
+#define PHOENIX_STATEMENT_SWITCH_HPP
+
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/phoenix/core/meta_grammar.hpp>
+#include <boost/phoenix/core/domain.hpp>
+
+#include <boost/proto/extends.hpp>
+#include <boost/proto/make_expr.hpp>
+
+namespace boost { namespace phoenix
+{
+    struct switch_case_tag {};
+
+    template <typename Expr>
+    struct switch_actor;
+
+    struct switch_domain
+        : proto::domain<
+          proto::pod_generator<switch_actor>,
+          proto::_, proto::default_domain>
+    {
+        template <typename T>
+        struct as_child : as_expr<T>
+        {};
+    };
+
+    struct test
+    {
+        typedef void result_type;
+
+        test() { std::cout << "hmmmm\n";}
+
+        template <typename A0, typename A1>
+        result_type
+        operator()( A0 const& a0, A1 const& a1) const
+        {
+            std::cout << "ok ..\n";
+        }
+    };
+
+    struct switch_grammar
+        : proto::or_<
+            proto::when<
+                proto::comma<switch_grammar, switch_grammar>
+              , proto::_default<switch_grammar>
+            >
+          /* proto::when<
+                proto::binary_expr<
+                    switch_case_tag
+                  , proto::_
+                  , proto::_
+                >
+              //, proto::_child1(proto::_child0)
+              //, proto::_default<switch_grammar>
+              , proto::_child1()
+            >
+          ,*/
+          , proto::when<
+                proto::binary_expr<switch_case_tag, proto::_, eval_grammar>
+              , proto::_default<eval_grammar>
+            >
+        >
+    {};
+
+    switch_grammar const switch_eval = switch_grammar();
+
+    template <typename Expr>
+    struct switch_actor
+    {
+        BOOST_PROTO_BASIC_EXTENDS(Expr, switch_actor<Expr>, switch_domain)
+        BOOST_PROTO_EXTENDS_ASSIGN()
+        BOOST_PROTO_EXTENDS_SUBSCRIPT()
+
+        typedef void result_type;
+
+        result_type
+        operator()() const
+        {
+            switch_eval(*this);
+            std::cout << "blubb0\n";
+            std::cout << typeid(Expr).name() << "\n";
+        }
+
+        template <typename A0>
+        result_type
+        operator()(A0 const& a0) const
+        {
+            std::cout << "blubb1\n";
+            switch_eval(*this);
+        }
+
+        template <typename A0, typename A1>
+        result_type
+        operator()(A0 const& a0, A1 const& a1) const
+        {
+            std::cout << "blubb2\n";
+            switch_eval(*this);
+        }
+
+        template <typename A0, typename A1, typename A2>
+        result_type
+        operator()(A0 const& a0, A1 const& a1, A1 const& a2) const
+        {
+            std::cout << "blubb3\n";
+            switch_eval(*this);
+        }
+    };
+    
+    template <int N, typename A0>
+    switch_actor<
+        typename proto::result_of::make_expr<
+            switch_case_tag
+          , default_domain_with_basic_expr
+          , int
+          , A0
+        >::type
+    >const
+    case_(A0 const& a0)
+    {
+        typedef typename
+            proto::result_of::make_expr<
+                switch_case_tag
+              , default_domain_with_basic_expr
+              , int
+              , A0
+            >::type
+            expr_type;
+
+        switch_actor<expr_type> const e = {{N, a0}};
+        return e;
+    }
+
+/*
+    template <typename Cond>
+    switch_gen<Cond>
+    switch_(Cond const& cond)
+    {
+        return switch_gen<Cond>(cond);
+    };
+
+    template <int N, typename A0>
+    switch_case<A0, int
+    */
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/statement/throw.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement/throw.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,60 @@
+/*==============================================================================
+    Copyright (c) 2005-2007 Dan Marsden
+    Copyright (c) 2005-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_STATEMENT_THROW_HPP
+#define PHOENIX_STATEMENT_THROW_HPP
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename ThrowExpr = void, typename Dummy=void>
+        struct throw_
+        {
+            typedef void type;
+        };
+    }
+
+    struct throw_eval
+    {
+        typedef void result_type;
+
+        template <typename Env>
+        result_type
+        operator()(Env& env) const
+        {
+            throw;
+        }
+
+        template <typename Env, typename ThrowExpr>
+        result_type
+        operator()(Env& env, ThrowExpr const& throw_expr) const
+        {
+            throw eval(throw_expr, env);
+        }
+    };
+
+    template <typename ThrowExpr = void>
+    struct make_throw : compose<throw_eval, ThrowExpr> {};
+
+    make_throw<>::type const
+    throw_()
+    {
+        return make_throw<>()();
+    }
+
+    template <typename ThrowExpr>
+    typename make_throw<ThrowExpr>::type const
+    throw_(ThrowExpr const& throw_expr)
+    {
+        return make_throw<ThrowExpr>()(throw_expr);
+    }
+
+}}
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/statement/try_catch.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement/try_catch.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,264 @@
+/*==============================================================================
+    Copyright (c) 2005-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !PHOENIX_IS_ITERATING
+
+#ifndef PHOENIX_STATEMENT_TRY_CATCH_HPP
+#define PHOENIX_STATEMENT_TRY_CATCH_HPP
+
+#include <boost/phoenix/support/element_at.hpp>
+#include <boost/phoenix/support/iterate.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, PHOENIX_typename_A_void(PHOENIX_CATCH_LIMIT)>
+        struct try_catch
+        {
+            typedef void type;
+        };
+    }
+
+    template <PHOENIX_typename_A_void(PHOENIX_CATCH_LIMIT), typename Dummy = void>
+    struct try_catch_eval;
+
+    template<>
+    struct try_catch_eval<>
+    {
+        typedef void result_type;
+
+        template <typename Env, typename Try, typename CatchAll>
+        result_type
+        operator()(Env& env, Try const& try_block, CatchAll const& catch_all) const
+        {
+            try
+            {
+                eval(try_block, env);
+            }
+            catch(...)
+            {
+                eval(catch_all, env);
+            }
+        }
+    };
+
+#define CATCH_EXCEPTION(_, n, __) \
+    BOOST_PP_COMMA_IF(n) typename CatchBlock ## n = void, typename Exception ## n = void
+    template <
+        typename Try
+      , BOOST_PP_REPEAT(PHOENIX_CATCH_LIMIT, CATCH_EXCEPTION, _)
+      , typename Dummy = void>
+    struct make_try_catch;
+
+    template <
+        typename Exception
+      , typename Try
+      , BOOST_PP_REPEAT(BOOST_PP_DEC(PHOENIX_CATCH_LIMIT), CATCH_EXCEPTION, _)
+      , typename Dummy = void>
+    struct catch_gen;
+#undef CATCH_EXCEPTION
+
+    template<typename Expr>
+    struct try_catch_actor0;
+
+    template <typename Try>
+    struct make_try_catch<Try> : compose_ex<try_catch_eval<>, try_catch_actor0, Try> {};
+
+    template <typename Try, typename CatchAll>
+    struct make_try_catch<Try, CatchAll> : compose<try_catch_eval<>, Try, CatchAll> {};
+
+    template <typename Exception, typename Try>
+    struct catch_gen<Exception, Try>
+    {
+        catch_gen(Try const& try_block) : try_block(try_block) {}
+
+        template <typename CatchBlock>
+        typename make_try_catch<Try, CatchBlock, Exception>::type const
+        operator[](CatchBlock const& catch_block) const
+        {
+            return make_try_catch<Try, CatchBlock, Exception>()(try_block, catch_block);
+        };
+
+        Try const& try_block;
+    };
+
+    template <typename Try>
+    struct catch_all_gen
+    {
+        catch_all_gen(Try const& try_block) : try_block(try_block) {}
+
+        template <typename CatchAll>
+        typename make_try_catch<Try, CatchAll>::type const
+        operator[](CatchAll const& catch_all) const
+        {
+            return make_try_catch<Try, CatchAll>()(try_block, catch_all);
+        }
+        
+        Try const& try_block;
+    };
+
+#define PHOENIX_ITERATION_PARAMS                                                \
+        (3, (1, PHOENIX_CATCH_LIMIT,                                            \
+        <boost/phoenix/statement/try_catch.hpp>))
+#include PHOENIX_ITERATE()
+
+    template <typename Expr>
+    struct try_catch_actor0
+        : actor<Expr>
+    {
+        typedef actor<Expr> base_type;
+
+        try_catch_actor0(base_type const& base)
+            : base_type(base)
+            , catch_all(element_at_c<0>(*this))
+        {}
+        
+        typedef typename result_of::element_value_at_c<Expr, 0>::type try_type;
+
+        template <typename Exception>
+        catch_gen<Exception, try_type> const
+        catch_() const
+        {
+            return catch_gen<Exception, try_type>(element_at_c<0>(*this));
+        }
+
+        const catch_all_gen<try_type> catch_all;
+    };
+
+    template <typename Expr>
+    struct BOOST_PP_CAT(try_catch_actor, BOOST_PP_INC(PHOENIX_CATCH_LIMIT))
+    {
+        typedef actor<Expr> base_type;
+
+        BOOST_PP_CAT(try_catch_actor, BOOST_PP_INC(PHOENIX_CATCH_LIMIT))(base_type const& base)
+            : base_type(base)
+            , catch_all(element_at_c<0>(*this))
+        {}
+        
+        typedef typename result_of::element_value_at_c<Expr, 0>::type try_type;
+
+        const catch_all_gen<try_type> catch_all;
+    };
+
+    struct try_gen
+    {
+        template <typename Try>
+        typename make_try_catch<Try>::type const
+        operator[](Try const& try_block) const
+        {
+            return make_try_catch<Try>()(try_block);
+        }
+    };
+
+    try_gen const try_ = try_gen();
+
+}}
+
+#endif
+
+#else
+
+#define PHOENIX_typename_Exception BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename Exception)
+#define PHOENIX_Exception BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, Exception)
+#define PHOENIX_Exception_ref BOOST_PP_ENUM_BINARY_PARAMS(PHOENIX_ITERATION, Exception, & BOOST_PP_INTERCEPT)
+
+    template <typename Exception, typename Try, PHOENIX_typename_A>
+    struct catch_gen<Exception, Try, PHOENIX_A>
+    {
+#define INIT_a(_,n,__) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(a,n)(BOOST_PP_CAT(a,n))
+        catch_gen(Try const& try_block, PHOENIX_A_const_ref_a)
+            : try_block(try_block)
+            , BOOST_PP_REPEAT(PHOENIX_ITERATION, INIT_a, _)
+        {}
+
+        template <typename CatchBlock>
+        typename make_try_catch<Try, PHOENIX_A, CatchBlock, Exception>::type const
+        operator[](CatchBlock const& catch_block) const
+        {
+            return make_try_catch<Try, PHOENIX_A, CatchBlock, Exception>()(try_block, PHOENIX_a, catch_block);
+        };
+
+        Try const& try_block;
+#define CATCH_BLOCK(_, n, __) A ## n const& a ## n;
+        BOOST_PP_REPEAT(PHOENIX_ITERATION, CATCH_BLOCK, _)
+#undef CATCH_BLOCK
+    };
+
+    template <PHOENIX_typename_Exception>
+    struct try_catch_eval<PHOENIX_Exception>
+    {
+        typedef void result_type;
+
+        template <typename Env, typename Try, PHOENIX_typename_A>
+        result_type
+        operator()(Env& env, Try const& try_, PHOENIX_A_const_ref_a) const
+        {
+            try
+            {
+                eval(try_, env);
+            }
+#define CATCH(_, n, __) \
+            catch(Exception ## n &) \
+            { \
+                eval(a ## n, env); \
+            }
+            BOOST_PP_REPEAT(PHOENIX_ITERATION, CATCH, _)
+#undef CATCH
+        }
+    };
+
+    template <typename Expr> struct BOOST_PP_CAT(try_catch_actor, PHOENIX_ITERATION);
+
+#define CATCH_EXCEPTION_typename(_, n, __) \
+    BOOST_PP_COMMA_IF(n) typename CatchBlock ## n, typename Exception ## n
+
+#define CATCH_EXCEPTION(_, n, __) \
+    BOOST_PP_COMMA_IF(n) CatchBlock ## n, Exception ## n
+
+    template <typename Try, BOOST_PP_REPEAT(PHOENIX_ITERATION, CATCH_EXCEPTION_typename, _)>
+    struct make_try_catch<Try, BOOST_PP_REPEAT(PHOENIX_ITERATION, CATCH_EXCEPTION, _)>
+        : compose_ex<
+            try_catch_eval<BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, Exception)>
+          , BOOST_PP_CAT(try_catch_actor, PHOENIX_ITERATION)
+          , Try
+          , BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, CatchBlock)
+          > {};
+
+    template <typename Expr>
+    struct BOOST_PP_CAT(try_catch_actor, PHOENIX_ITERATION)
+        : actor<Expr>
+    {
+        typedef actor<Expr> base_type;
+
+        BOOST_PP_CAT(try_catch_actor, PHOENIX_ITERATION)(base_type const& base)
+            : base_type(base)
+            , catch_all(element_at_c<0>(*this))
+        {}
+        
+        typedef typename result_of::element_value_at_c<Expr, 0>::type try_type;
+#define CATCH_BLOCK_TYPES(_, n, __) \
+        typedef typename result_of::element_value_at_c<Expr, n>::type catch_block_type ## n;
+        BOOST_PP_REPEAT_FROM_TO(1, PHOENIX_ITERATION, CATCH_BLOCK_TYPES, _)
+#undef CATCH_BLOCK_TYPES
+
+        template <typename Exception>
+        catch_gen<Exception, try_type> const
+        catch_() const
+        {
+            return catch_gen<Exception, try_type>(element_at_c<0>(*this));
+        }
+
+        const catch_all_gen<try_type> catch_all;
+    };
+
+#undef PHOENIX_typename_Exception
+#undef PHOENIX_Exception
+#undef PHOENIX_Exception_ref
+
+#endif
Added: sandbox/SOC/2010/phoenix3/boost/phoenix/statement/while.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement/while.hpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -0,0 +1,67 @@
+/*==============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2010 Thomas Heller
+
+    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 PHOENIX_STATEMENT_WHILE_HPP
+#define PHOENIX_STATEMENT_WHILE_HPP
+
+#include <boost/phoenix/core/compose.hpp>
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Env, typename Cond, typename Do>
+        struct while_
+        {
+            typedef void type;
+        };
+    }
+
+    struct while_eval
+    {
+        typedef void result_type;
+
+        template <typename Env, typename Cond, typename Do>
+        result_type
+        operator()(Env& env, Cond const& cond, Do const& do_) const
+        {
+            while(eval(cond, env))
+            {
+                eval(do_, env);
+            }
+        }
+    };
+
+    template <typename Cond, typename Do>
+    struct make_while : compose<while_eval, Cond, Do> {};
+
+    template <typename Cond>
+    struct while_gen
+    {
+        while_gen(Cond const& cond) : cond(cond) {}
+
+        template <typename Do>
+        typename make_while<Cond, Do>::type const
+        operator[](Do const& do_) const
+        {
+            return make_while<Cond, Do>()(cond, do_);
+        }
+
+        Cond const& cond;
+    };
+
+    template <typename Cond>
+    while_gen<Cond> const
+    while_(Cond const& cond)
+    {
+        return while_gen<Cond>(cond);
+    }
+
+
+}}
+
+#endif
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/Jamfile
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/Jamfile	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/Jamfile	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -25,7 +25,7 @@
     [ run operator/arithmetic_tests.cpp ] 
     [ run operator/bitwise_tests.cpp ]
     [ run operator/comparison_tests.cpp ] 
-#    [ run operator/if_else_tests.cpp ]
+    [ run operator/if_else_tests.cpp ]
     [ run operator/io_tests.cpp ]
     [ run operator/logical_tests.cpp ]
     [ run operator/misc_binary_tests.cpp ]
@@ -34,10 +34,10 @@
     [ run operator/member.cpp ]
     ;
 
-#test-suite phoenix_object :
-#    [ run object/cast_tests.cpp ] 
-#    [ run object/new_delete_tests.cpp ] 
-#    ;
+test-suite phoenix_object :
+    [ run object/cast_tests.cpp ] 
+    [ run object/new_delete_tests.cpp ] 
+    ;
 
 test-suite phoenix_function :
     [ run function/function_tests.cpp ] 
@@ -52,9 +52,9 @@
     
 test-suite phoenix_statement :
     [ run statement/if_tests.cpp ] 
-#    [ run statement/loops_tests.cpp ] 
+    [ run statement/loops_tests.cpp ] 
 #    [ run statement/switch_tests.cpp ] 
-#    [ run statement/exceptions.cpp ]
+    [ run statement/exceptions.cpp ]
     ;
         
 #test-suite phoenix_container :
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_function_object_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_function_object_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_function_object_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -18,7 +18,9 @@
     struct test
     {
         typedef void result_type;
-        void operator()() const
+
+        void
+        operator()() const
         {
             cout << "Test lazy functions...\n";
         }
@@ -26,17 +28,18 @@
 
     struct sqr
     {
-        template<typename Sig>
+        template <typename Sig>
         struct result;
 
-        template<typename This, typename Arg>
+        template <typename This, typename Arg>
         struct result<This(Arg&)>
         {
             typedef Arg type;
         };
 
         template <typename Arg>
-        Arg operator()(Arg n) const
+        Arg
+        operator()(Arg n) const
         {
             return n * n;
         }
@@ -44,17 +47,18 @@
 
     struct fact
     {
-        template<typename Sig>
+        template <typename Sig>
         struct result;
 
-        template<typename This, typename Arg>
+        template <typename This, typename Arg>
         struct result<This(Arg&)>
         {
             typedef Arg type;
         };
 
         template <typename Arg>
-        Arg operator()(Arg n) const
+        Arg
+        operator()(Arg n) const
         {
             return (n <= 0) ? 1 : n * (*this)(n-1);
         }
@@ -72,7 +76,8 @@
         };
 
         template <typename Arg1, typename Arg2>
-        Arg1 operator()(Arg1 a, Arg2 b) const
+        Arg1
+        operator()(Arg1 a, Arg2 b) const
         {
             return pow(a, b);
         }
@@ -80,7 +85,7 @@
 
     struct add
     {
-        template<typename Sig>
+        template <typename Sig>
         struct result;
 
         template <typename This, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
@@ -90,7 +95,8 @@
         };
 
         template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>
-        Arg1 operator()(Arg1 a, Arg2 b, Arg3 c, Arg4 d) const
+        Arg1
+        operator()(Arg1 a, Arg2 b, Arg3 c, Arg4 d) const
         {
             return a + b + c + d;
         }
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_function_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_function_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_function_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -1,26 +1,21 @@
 /*=============================================================================
-    Copyright (c) 2001-2007 Joel de Guzman
+  Copyright (c) 2001-2007 Joel de Guzman
 
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
+  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 <iostream>
 #include <cmath>
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/phoenix/core.hpp>
-#include <boost/phoenix/operator.hpp>
 #include <boost/phoenix/bind.hpp>
 
-using namespace boost::phoenix;
-using namespace boost::phoenix::arg_names;
-using namespace std;
-
 namespace test
 {
     void
     test()
     {
-        cout << "Test binding functions...\n";
+        std::cout << "Test binding functions...\n";
     }
 
     int
@@ -45,13 +40,17 @@
 int
 main()
 {
+    using boost::phoenix::bind;
+    using boost::phoenix::arg_names::arg1;
+    using boost::phoenix::arg_names::arg2;
+
     int a = 123;
     int b = 256;
 
     bind(test::test)();
     BOOST_TEST(bind(test::negate, arg1)(a) == -a);
     BOOST_TEST(bind(test::plus, arg1, arg2)(a, b) == a+b);
-    //BOOST_TEST(bind(test::plus4, arg1, arg2, 3, 4)(a, b) == a+b+3+4);
+    BOOST_TEST(bind(test::plus4, arg1, arg2, 3, 4)(a, b) == a+b+3+4);
 
     return boost::report_errors();
 }
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_member_function_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_member_function_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_member_function_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -12,23 +12,18 @@
 #include <boost/phoenix/operator.hpp>
 #include <boost/phoenix/bind.hpp>
 
-using namespace boost::phoenix;
-using namespace boost::phoenix::arg_names;
-using namespace std;
-namespace phx = boost::phoenix;
-
 namespace test
 {
-    struct x : boost::noncopyable // test non-copyable (hold this by reference)
+    struct x //: boost::noncopyable // test non-copyable (hold this by reference)
     {
         void
         test() const
         {
-            cout << "Test binding member functions...\n";
+            std::cout << "Test binding member functions...\n";
         }
     };
 
-    struct y : boost::noncopyable // test non-copyable (hold this by reference)
+    struct y //: boost::noncopyable // test non-copyable (hold this by reference)
     {
         int
         negate(int n) const
@@ -37,7 +32,7 @@
         }
     };
 
-    struct z : boost::noncopyable // test non-copyable (hold this by reference)
+    struct z //: boost::noncopyable // test non-copyable (hold this by reference)
     {
         int
         plus(int a, int b) const
@@ -46,10 +41,10 @@
         }
     };
 
-    struct zz : boost::noncopyable // test non-copyable (hold this by reference)
+    struct zz //: boost::noncopyable // test non-copyable (hold this by reference)
     {
         int
-        plus3(int a, int b, int c)
+        plus3(int a, int b, int c) const
         {
             return a + b + c;
         }
@@ -59,6 +54,12 @@
 int
 main()
 {
+    using boost::phoenix::bind;
+    using boost::phoenix::ref;
+    using boost::phoenix::arg_names::arg1;
+    using boost::phoenix::arg_names::arg2;
+    using boost::phoenix::arg_names::arg3;
+
     int a = 123;
     int b = 256;
     test::x x_;
@@ -66,12 +67,10 @@
     test::z z_;
     test::zz zz_;
 
-    //bind(&test::x::test, x_)(0); // <- original test, fails due to attempt of copying
-    bind(&test::x::test, ref(x_))();
-    //BOOST_TEST(bind(&test::y::negate, y_, arg1)(a) == -a); // same as above
-    BOOST_TEST(bind(&test::y::negate, ref(y_), arg1)(a) == -a);
-    //BOOST_TEST(bind(&test::z::plus, arg1, arg2, arg3)(z_, a, b) == a+b);
-    //BOOST_TEST(bind(&test::zz::plus3, zz_, arg1, arg2, arg3)(a, b, a) == a+b+a);
+    bind(&test::x::test, x_)();
+    BOOST_TEST(bind(&test::y::negate, y_, arg1)(a) == -a);
+    BOOST_TEST(bind(&test::z::plus, arg1, arg2, arg3)(z_, a, b) == a+b);
+    BOOST_TEST(bind(&test::zz::plus3, zz_, arg1, arg2, arg3)(a, b, a) == a+b+a);
     BOOST_TEST(bind(&test::y::negate, &y_, 777)(a) == -777);
 
     return boost::report_errors();
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_member_variable_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_member_variable_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/bind/bind_member_variable_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -9,17 +9,11 @@
 #include <boost/noncopyable.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/phoenix/core.hpp>
-#include <boost/phoenix/operator.hpp>
 #include <boost/phoenix/bind.hpp>
 
-using namespace boost::phoenix;
-using namespace boost::phoenix::arg_names;
-using namespace std;
-namespace phx = boost::phoenix;
-
 namespace test
 {
-    struct x : boost::noncopyable // test non-copyable (hold this by reference)
+    struct x //: boost::noncopyable // test non-copyable (hold this by reference)
     {
         int m;
     };
@@ -29,17 +23,28 @@
     };
 }
 
-template<class T, class F>
-void write_test(F f) {
+template <typename T, typename F>
+void
+write_test(F f)
+{
+    using boost::phoenix::arg_names::arg1;
+    using boost::phoenix::bind;
+
     T x_;
+
     bind(&T::m, f(x_))() = 122;
     BOOST_TEST(x_.m == 122);
     bind(&T::m, arg1)(f(x_)) = 123;
     BOOST_TEST(x_.m == 123);
 }
 
-template<class T, class F>
-void read_test(F f) {
+template <typename T, typename F>
+void
+read_test(F f)
+{
+    using boost::phoenix::arg_names::arg1;
+    using boost::phoenix::bind;
+
     T x_;
     x_.m = 123;
 
@@ -49,8 +54,9 @@
 
 struct identity
 {
-    template<class T>
-    T& operator()(T& t) const
+    template <typename T>
+    T&
+    operator()(T& t) const
     {
         return t;
     }
@@ -58,8 +64,9 @@
 
 struct constify
 {
-    template<class T>
-    const T& operator()(const T& t) const
+    template <typename T>
+    T const&
+    operator()(T const& t) const
     {
         return t;
     }
@@ -67,8 +74,9 @@
 
 struct add_pointer
 {
-    template<class T>
-    T* const operator()(T& t) const
+    template <typename T>
+    T* const
+    operator()(T& t) const
     {
         return &t;
     }
@@ -76,8 +84,9 @@
 
 struct add_const_pointer
 {
-    template<class T>
-    const T* const operator()(const T& t) const
+    template <typename T>
+    const T* const
+    operator()(T const& t) const
     {
         return &t;
     }
@@ -91,13 +100,14 @@
     //write_test<test::xx>(identity());
     write_test<test::xx>(add_pointer());
 
-    //read_test<test::x>(identity());
-    //read_test<test::x>(constify()); // this fails because of capture by value.
+    read_test<test::x>(identity());
+    read_test<test::x>(constify());
     read_test<test::x>(add_pointer());
     read_test<test::x>(add_const_pointer());
-    //read_test<test::xx>(identity());
-    //read_test<test::xx>(constify());// this fails because of capture by value.
+    read_test<test::xx>(identity());
+    read_test<test::xx>(constify());
     read_test<test::xx>(add_pointer());
     read_test<test::xx>(add_const_pointer());
+
     return boost::report_errors();
 }
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/function/function_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/function/function_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/function/function_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -1,9 +1,9 @@
 /*=============================================================================
-    Copyright (c) 2001-2007 Joel de Guzman
+  Copyright (c) 2001-2007 Joel de Guzman
 
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
+  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 <iostream>
 #include <cmath>
 #include <boost/detail/lightweight_test.hpp>
@@ -11,105 +11,108 @@
 #include <boost/phoenix/operator.hpp>
 #include <boost/phoenix/function.hpp>
 
-using namespace boost::phoenix;
-using namespace boost::phoenix::arg_names;
-using namespace std;
-
-    struct test_impl
-    {
-        typedef void result_type;
-        void operator()() const
-        {
-            cout << "Test lazy functions...\n";
-        }
-    };
+struct test_impl
+{
+    typedef void result_type;
+    void operator()() const
+    {
+        std::cout << "Test lazy functions...\n";
+    }
+};
 
-    function<test_impl> test;
+boost::phoenix::function<test_impl> test;
 
-    struct sqr_impl
-    {
-        template<typename Signature>
-        struct result;
+struct sqr_impl
+{
+    template <typename Signature>
+    struct result;
 
-        template <typename This, typename Arg>
-        struct result<This(Arg &)>
-        {
-            typedef Arg type;
-        };
-
-        template <typename Arg>
-        Arg operator()(Arg n) const
-        {
-            return n * n;
-        }
+    template <typename This, typename Arg>
+    struct result<This(Arg &)>
+    {
+        typedef Arg type;
     };
 
-    function<sqr_impl> sqr;
-
-    struct fact_impl
+    template <typename Arg>
+    Arg
+    operator()(Arg n) const
     {
-        template<typename Signature>
-        struct result;
+        return n * n;
+    }
+};
 
-        template <typename This, typename Arg>
-        struct result<This(Arg &)>
-        {
-            typedef Arg type;
-        };
-
-        template <typename Arg>
-        Arg operator()(Arg n) const
-        {
-            return (n <= 0) ? 1 : n * (*this)(n-1);
-        }
-    };
+boost::phoenix::function<sqr_impl> sqr;
 
-    function<fact_impl> fact;
+struct fact_impl
+{
+    template <typename Signature>
+    struct result;
 
-    struct pow_impl
+    template <typename This, typename Arg>
+    struct result<This(Arg &)>
     {
+        typedef Arg type;
+    };
 
-        template<typename Sig>
-        struct result;
+    template <typename Arg>
+    Arg
+    operator()(Arg n) const
+    {
+        return (n <= 0) ? 1 : n * (*this)(n-1);
+    }
+};
 
-        template <typename This, typename Arg1, typename Arg2>
-        struct result<This(Arg1 &, Arg2 &)>
-        {
-            typedef Arg1 type;
-        };
+boost::phoenix::function<fact_impl> fact;
 
-        template <typename Arg1, typename Arg2>
-        Arg1 operator()(Arg1 a, Arg2 b) const
-        {
-            return pow(a, b);
-        }
-    };
+struct pow_impl
+{
+
+    template <typename Sig>
+    struct result;
 
-    function<pow_impl> power;
+    template <typename This, typename Arg1, typename Arg2>
+    struct result<This(Arg1 &, Arg2 &)>
+    {
+        typedef Arg1 type;
+    };
 
-    struct add_impl
+    template <typename Arg1, typename Arg2>
+    Arg1
+    operator()(Arg1 a, Arg2 b) const
     {
-        template<typename Sig>
-        struct result;
+        return pow(a, b);
+    }
+};
+
+boost::phoenix::function<pow_impl> power;
 
-        template <typename This, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
-        struct result<This(Arg1&, Arg2&, Arg3&, Arg4&)>
-        {
-            typedef Arg1 type;
-        };
-
-        template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>
-        Arg1 operator()(Arg1 a, Arg2 b, Arg3 c, Arg4 d) const
-        {
-            return a + b + c + d;
-        }
+struct add_impl
+{
+    template <typename Sig>
+    struct result;
+
+    template <typename This, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
+    struct result<This(Arg1&, Arg2&, Arg3&, Arg4&)>
+    {
+        typedef Arg1 type;
     };
 
-    function<add_impl> add;
+    template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>
+    Arg1
+    operator()(Arg1 a, Arg2 b, Arg3 c, Arg4 d) const
+    {
+        return a + b + c + d;
+    }
+};
+
+boost::phoenix::function<add_impl> add;
 
 int
 main()
 {
+    using boost::phoenix::arg_names::arg1;
+    using boost::phoenix::arg_names::arg2;
+
     int i5 = 5;
     double d5 = 5, d3 = 3;
 
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/object/cast_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/object/cast_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/object/cast_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -6,12 +6,10 @@
 ==============================================================================*/
 #include <string>
 #include <boost/detail/lightweight_test.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_object.hpp>
+#include <boost/phoenix/core.hpp>
+#include <boost/phoenix/object.hpp>
 
-using namespace boost::phoenix;
-using namespace boost::phoenix::arg_names;
-using namespace std;
+using std::string;
 
 struct T
 {
@@ -36,6 +34,12 @@
 int
 main()
 {
+    using boost::phoenix::arg_names::arg1;
+    using boost::phoenix::const_cast_;
+    using boost::phoenix::dynamic_cast_;
+    using boost::phoenix::reinterpret_cast_;
+    using boost::phoenix::static_cast_;
+
     {
         U u;
         BOOST_TEST(arg1(u).foo() == "U");
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/object/new_delete_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/object/new_delete_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/object/new_delete_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -9,16 +9,15 @@
 #include <algorithm>
 #include <boost/shared_ptr.hpp>
 #include <boost/detail/lightweight_test.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_object.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-
-using namespace boost::phoenix;
-using namespace boost::phoenix::arg_names;
-using namespace std;
+#include <boost/phoenix/core.hpp>
+#include <boost/phoenix/object.hpp>
+#include <boost/phoenix/operator.hpp>
 
 int n = 0;
 
+using std::cout;
+using std::endl;
+
 struct X
 {
     X(int, int, int) { cout << "new X(int, int, int)" << endl; ++n; }
@@ -29,6 +28,14 @@
 int
 main()
 {
+    using boost::phoenix::arg_names::arg1;
+    using boost::phoenix::construct;
+    using boost::phoenix::delete_;
+    using boost::phoenix::new_;
+
+    using std::for_each;
+    using std::vector;
+
     {
         vector<X*> v(10);
 
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/if_else_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/if_else_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/if_else_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -13,24 +13,24 @@
 int
 main()
 {
-    using phoenix::if_else;
-	 using phoenix::ref;
-	 using phoenix::val;
-	 using phoenix::arg_names::arg1;
+    //using phoenix::if_else;
+    using phoenix::ref;
+    using phoenix::val;
+    using phoenix::arg_names::arg1;
     {
         int x = 0;
         int y = 0;
         bool c = false;
-
-        BOOST_TEST(if_else(arg1, 1234, 5678)(c) == 5678);
-        BOOST_TEST(if_else(arg1, 1234, 'x')(c) == 'x');
-
-        int& r = if_else(arg1, ref(x), ref(y))(c); // should be an lvalue
+        
+        BOOST_TEST(phoenix::if_else(arg1, 1234, 5678)(c) == 5678);
+        BOOST_TEST(phoenix::if_else(arg1, 1234, 'x')(c) == 'x');
+        
+        int& r = phoenix::if_else(arg1, ref(x), ref(y))(c); // should be an lvalue
         BOOST_TEST(&y == &r);
-
-        (if_else(arg1, ref(x), ref(y)) = 986754321)(c);
+        
+        (phoenix::if_else(arg1, ref(x), ref(y)) = 986754321)(c);
         BOOST_TEST(y == 986754321);
     }
-
+    
     return boost::report_errors();
 }
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/member.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/member.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/member.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -49,14 +49,14 @@
     ((val(ptr)->*&Test::value) = 2)();
     BOOST_TEST(test.value == 2);
 
-    BOOST_TEST((val(ptr)->*&Test::func)(3)() == 3);
-    int i = 33;
-    BOOST_TEST((arg1->*&Test::func)(arg2)(cptr, i) == i);
-    BOOST_TEST((val(cptr)->*&Test::func)(4)() == 4);
-    BOOST_TEST((val(ptr)->*&Test::dunc)()() == 10);
+    //BOOST_TEST((val(ptr)->*&Test::func)(3)() == 3);
+    //int i = 33;
+    //BOOST_TEST((arg1->*&Test::func)(arg2)(cptr, i) == i);
+    //BOOST_TEST((val(cptr)->*&Test::func)(4)() == 4);
+    //BOOST_TEST((val(ptr)->*&Test::dunc)()() == 10);
 
-    BOOST_TEST((arg1->*&Test::func)(5)(ptr) == 5);
-    BOOST_TEST((arg1->*&Test::kunc)()(ptr));
+    //BOOST_TEST((arg1->*&Test::func)(5)(ptr) == 5);
+    //BOOST_TEST((arg1->*&Test::kunc)()(ptr));
 
     /*
     shared_ptr<Test> sptr(new Test(test));
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/statement/exceptions.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/statement/exceptions.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/statement/exceptions.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -9,17 +9,21 @@
 #include <stdexcept>
 #include <string>
 
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/phoenix/core.hpp>
+#include <boost/phoenix/operator.hpp>
+#include <boost/phoenix/statement.hpp>
 
 #include <boost/detail/lightweight_test.hpp>
 
 int main()
 {
-    using namespace boost::phoenix;
-    using namespace boost::phoenix::arg_names;
-    using namespace std;
+    using boost::phoenix::throw_;
+    using boost::phoenix::try_;
+    using boost::phoenix::ref;
+    //using namespace boost::phoenix::arg_names;
+    using std::exception;
+    using std::string;
+    using std::runtime_error;
 
     {
         try
@@ -51,7 +55,6 @@
             BOOST_TEST(err.what() == string("error"));
         }
     }
-
     {
         bool caught_exception = false;
 
@@ -72,6 +75,7 @@
         BOOST_TEST(caught_exception);
     }
 
+/*
     {
         bool caught_correct_exception = false;
         try_
@@ -95,6 +99,6 @@
 
         BOOST_TEST(caught_correct_exception);
     }
-
+*/
     return boost::report_errors();
 }
Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/statement/loops_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/statement/loops_tests.cpp	(original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/statement/loops_tests.cpp	2010-07-02 01:55:02 EDT (Fri, 02 Jul 2010)
@@ -8,17 +8,25 @@
 #include <vector>
 #include <algorithm>
 #include <boost/detail/lightweight_test.hpp>
-#include <boost/spirit/include/phoenix_statement.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-
-using namespace boost::phoenix;
-using namespace boost::phoenix::arg_names;
-using namespace std;
+#include <boost/phoenix/core.hpp>
+#include <boost/phoenix/statement.hpp>
+#include <boost/phoenix/operator.hpp>
 
 int
 main()
 {
+    using boost::phoenix::arg_names::arg1;
+    using boost::phoenix::do_;
+    using boost::phoenix::for_;
+    using boost::phoenix::ref;
+    using boost::phoenix::val;
+    using boost::phoenix::while_;
+
+    using std::cout;
+    using std::endl;
+    using std::for_each;
+    using std::vector;
+
     int init[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     vector<int> v(init, init+10);
     vector<int> t = v;
@@ -32,7 +40,8 @@
                 cout << arg1 << ", ",
                 ++ref(x)
             ],
-            cout << val("\n")
+            cout << ref("\n")
+            //cout << val("\n")
         )
     );
 
@@ -49,7 +58,8 @@
                 ++ref(x)
             ]
             .while_(arg1--),
-            cout << val("\n")
+            cout << ref("\n")
+            //cout << val("\n")
         )
     );
 
@@ -66,7 +76,8 @@
                 cout << arg1 << ", ",
                 ++ref(x)
             ],
-            cout << val("\n")
+            cout << ref("\n")
+            //cout << val("\n")
         )
     );