$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r60254 - in sandbox/SOC/2009/fusion: boost/fusion/algorithm/query/detail boost/fusion/container/list boost/fusion/container/vector/detail/pp boost/fusion/container/vector/detail/variadic_templates boost/fusion/functional/invocation/detail boost/fusion/iterator boost/fusion/support boost/fusion/support/internal boost/fusion/view/single_view libs/fusion/example/extension libs/fusion/example/extension/detail libs/fusion/example/extension/struct libs/fusion/example/extension/struct/detail libs/fusion/example/extension/triple libs/fusion/example/test libs/fusion/test libs/fusion/test/compile_time libs/fusion/test/sequence
From: mr.chr.schmidt_at_[hidden]
Date: 2010-03-06 15:28:08
Author: cschmidt
Date: 2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
New Revision: 60254
URL: http://svn.boost.org/trac/boost/changeset/60254
Log:
updated examples
Added:
   sandbox/SOC/2009/fusion/boost/fusion/support/internal/is_explicitly_convertible.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/Jamfile   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/advance_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/at_key_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/begin_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/category_of_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/deref_data_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/deref_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/distance_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/end_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/equal_to_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/example_struct_iterator.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/has_key_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/is_sequence_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/is_view_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/key_of_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/next_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/prior_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/size_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/tag_of.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_at_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_at_key_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_of_data_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_of_impl.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/example_struct.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/example_struct_type.hpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/test_example.cpp   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/Jamfile   (contents, props changed)
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/triple.cpp   (contents, props changed)
Removed:
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/Jamfile
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/detail/
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct.hpp
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct_iterator.hpp
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct_type.hpp
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/tag_of.hpp
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/test_example.cpp
   sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple.cpp
   sandbox/SOC/2009/fusion/libs/fusion/example/test/
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp                        |     1 +                                       
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp                      |     1 +                                       
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/find_if.hpp                    |     1 +                                       
   sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp                               |     7 +++++--                                 
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp               |     7 +++++--                                 
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp |    12 ++++++------                            
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp               |     8 ++------                                
   sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp                                 |    28 +++++++++++++---------------            
   sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp                                      |    25 ++++++++++++++-----------               
   sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp                      |    17 +++++++++++++----                       
   sandbox/SOC/2009/fusion/libs/fusion/test/Jamfile                                           |     3 ++-                                     
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/fold.cpp                             |     2 +-                                      
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/transform.cpp                        |     2 +-                                      
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_construction.cpp              |     2 +-                                      
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_intrinsic.cpp                 |     2 +-                                      
   sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_iteration.cpp                 |     2 +-                                      
   sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp                        |     2 +-                                      
   sandbox/SOC/2009/fusion/libs/fusion/test/sequence/vector_iterator.cpp                      |     2 +-                                      
   18 files changed, 70 insertions(+), 54 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/all.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -1,6 +1,7 @@
 /*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
     Copyright (c) 2007 Dan Marsden
+    Copyright (c) 2009 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/count.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -1,5 +1,6 @@
 /*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2009 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/find_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/find_if.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/detail/find_if.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -1,6 +1,7 @@
 /*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
     Copyright (c) 2007 Dan Marsden
+    Copyright (c) 2009 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -15,6 +15,7 @@
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/internal/is_explicitly_convertible.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/internal/assign_tags.hpp>
 #include <boost/fusion/support/internal/sequence_assign.hpp>
@@ -26,7 +27,6 @@
 #ifdef BOOST_NO_RVALUE_REFERENCES
 #   include <boost/call_traits.hpp>
 #endif
-#include <boost/type_traits/is_convertible.hpp>
 #include <boost/utility/enable_if.hpp>
 
 #include <boost/fusion/container/list/detail/cons_fwd.hpp>
@@ -183,7 +183,10 @@
         cons(
             BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
             typename disable_if<
-                is_convertible<BOOST_FUSION_R_ELSE_CLREF(Seq), car_type>
+                detail::is_explicitly_convertible<
+                    BOOST_FUSION_R_ELSE_CLREF(Seq)
+                  , car_type
+                >
             >::type* =0)
           : car(fusion::front(BOOST_FUSION_FORWARD(Seq,seq)))
           , cdr(detail::assign_by_deref(),
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -20,6 +20,7 @@
 #   include <boost/fusion/support/internal/ref.hpp>
 #   include <boost/fusion/support/internal/sequence_assign.hpp>
 #   include <boost/fusion/support/internal/template.hpp>
+#   include <boost/fusion/support/internal/is_explicitly_convertible.hpp>
 
 #   include <boost/preprocessor/cat.hpp>
 #   include <boost/preprocessor/dec.hpp>
@@ -34,7 +35,6 @@
 #   ifdef BOOST_FUSION_PREFER_MPL
 #       include <boost/mpl/at.hpp>
 #   endif
-#   include <boost/type_traits/is_convertible.hpp>
 #   include <boost/type_traits/add_const.hpp>
 #   include <boost/utility/enable_if.hpp>
 
@@ -143,7 +143,10 @@
         explicit
         vector1(BOOST_FUSION_R_ELSE_LREF(Seq) seq,
                 typename disable_if<
-                    is_convertible<BOOST_FUSION_R_ELSE_LREF(Seq), T0>
+                    detail::is_explicitly_convertible<
+                        BOOST_FUSION_R_ELSE_LREF(Seq)
+                      , T0
+                    >
                 >::type* =0)
           : m0(fusion::front(seq))
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -13,13 +13,14 @@
 #include <boost/fusion/iterator/advance_c.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
 #ifdef BOOST_FUSION_PREFER_MPL
 #   include <boost/fusion/support/internal/variadic_templates/variadic_arguments_to_vector.hpp>
 #endif
 #include <boost/fusion/support/internal/sequence_assign.hpp>
 #include <boost/fusion/support/internal/assign_tags.hpp>
-#include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
+#include <boost/fusion/support/internal/is_explicitly_convertible.hpp>
 
 #ifndef BOOST_FUSION_TAGGED_VECTOR
 #   include <boost/preprocessor/inc.hpp>
@@ -35,7 +36,6 @@
 #ifdef BOOST_NO_RVALUE_REFERENCES
 #   include <boost/call_traits.hpp>
 #endif
-#include <boost/type_traits/is_convertible.hpp>
 #include <boost/type_traits/add_const.hpp>
 #include <boost/utility/enable_if.hpp>
 
@@ -48,11 +48,11 @@
     namespace detail
     {
         template<typename From, typename... Elements>
-        struct is_convertible_to_head;
+        struct is_explicitly_convertible_to_head;
 
         template<typename From, typename Head, typename... Rest>
-        struct is_convertible_to_head<From, Head, Rest...>
-          : is_convertible<From, Head>
+        struct is_explicitly_convertible_to_head<From, Head, Rest...>
+          : is_explicitly_convertible<From, Head>
         {};
 
 #ifdef BOOST_FUSION_TAGGED_VECTOR
@@ -446,7 +446,7 @@
             typename disable_if<
                 mpl::and_<
                     mpl::bool_<sizeof...(Elements)==1>
-                  , detail::is_convertible_to_head<
+                  , detail::is_explicitly_convertible_to_head<
                         BOOST_FUSION_R_ELSE_CLREF(Seq)
                       , Elements...
                     >
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -8,7 +8,7 @@
 #include <boost/config.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
-
+#include <boost/ref.hpp>
 #if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
 #   include <boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp>
 #else
@@ -22,11 +22,7 @@
         template<typename F, typename Seq>
         struct BOOST_FUSION_INVOKE_NAME
           : detail::BOOST_FUSION_INVOKE_NAME<
-#ifdef BOOST_NO_RVALUE_REFERENCES
-                typename traits::deduce<F>::type
-#else
-                typename traits::deduce_ref<F>::type
-#endif
+                typename unwrap_reference<F>::type
               , typename detail::add_lref<Seq>::type
             >
         {
Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -55,11 +55,10 @@
 #ifndef BOOST_NO_CONSTEXPR
         constexpr
 #endif
-        typename
-            enable_if<
-                mpl::and_<traits::is_iterator<It1>, traits::is_iterator<It2> >
-              , bool
-            >::type
+        typename enable_if<
+            mpl::and_<traits::is_iterator<It1>, traits::is_iterator<It2> >
+          , bool
+        >::type
         operator==(It1 const&, It2 const&)
         {
             return result_of::equal_to<It1 const&, It1 const&>::value;
@@ -70,17 +69,16 @@
 #ifndef BOOST_NO_CONSTEXPR
         constexpr
 #endif
-        typename
-            enable_if<
-                mpl::and_<
-                    traits::is_iterator<It1>
-                  , traits::is_iterator<It2>
-                >
-              , bool
-            >::type
-        operator!=(It1 const&, It1 const&)
+        typename enable_if<
+            mpl::and_<
+                traits::is_iterator<It1>
+              , traits::is_iterator<It2>
+            >
+          , bool
+        >::type
+        operator!=(It1 const&, It2 const&)
         {
-            return !result_of::equal_to<It1 const&, It1 const&>::value;
+            return !result_of::equal_to<It1 const&, It2 const&>::value;
         }
     }
 
Added: sandbox/SOC/2009/fusion/boost/fusion/support/internal/is_explicitly_convertible.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/is_explicitly_convertible.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2009-2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_SUPPORT_INTERNAL_IS_EXPLICITLY_CONVERTIBLE_HPP
+#define BOOST_FUSION_SUPPORT_INTERNAL_IS_EXPLICITLY_CONVERTIBLE_HPP
+
+#include <boost/config.hpp>
+#if BOOST_WORKAROUND(__GNUC__,<4)
+#   include <boost/type_traits/is_convertible.hpp>
+#else
+#   include <boost/fusion/support/internal/small_big_type.hpp>
+#   include <boost/mpl/bool.hpp>
+#   include <cstddef>
+#endif
+
+namespace boost { namespace fusion { namespace detail
+{
+//cschmidt: Fall back due to a defect in gcc 3.x's call_expr...
+#if BOOST_WORKAROUND(__GNUC__,<4)
+    template<typename From, typename To>
+    struct is_explicitly_convertible
+      : is_convertible<From,To>
+    {};
+#else
+    template<typename T>
+    T
+    get_t();
+
+    template<std::size_t>
+    struct helper;
+
+    template<>
+    struct helper<sizeof(int)>
+    {
+        typedef big_type type;
+    };
+
+    template<typename From, typename To>
+    struct is_explicitly_convertible_impl
+    {
+        template<typename T>
+        static typename helper<sizeof(static_cast<T>(get_t<From>()),0)>::type
+        impl(int);
+
+        template<typename>
+        static small_type
+        impl(...);
+
+        typedef mpl::bool_<sizeof(impl<To>(0)) == sizeof(big_type)> type;
+    };
+
+    template<typename From, typename To>
+    struct is_explicitly_convertible
+      : is_explicitly_convertible_impl<From,To>::type
+    {};
+#endif
+}}}
+
+#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/pair.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -1,7 +1,7 @@
 /*=============================================================================
     Copyright (c) 2005 Joel de Guzman
     Copyright (c) 2006 Tobias Schwinger
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -10,19 +10,19 @@
 #ifndef BOOST_FUSION_SUPPORT_PAIR_HPP
 #define BOOST_FUSION_SUPPORT_PAIR_HPP
 
-#include <boost/fusion/support/internal/ref.hpp>
 #include <boost/fusion/support/deduce.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#ifndef BOOST_NO_RVALUE_REFERENCES
+#   include <boost/fusion/support/internal/is_explicitly_convertible.hpp>
+#endif
 
 #include <boost/preprocessor/empty.hpp>
-#if defined(BOOST_NO_VARIADIC_TEMPLATES) && defined(BOOST_NO_RVALUE_REFERENCES)
+#ifdef BOOST_NO_RVALUE_REFERENCES
 #   include <boost/call_traits.hpp>
 #else
 #   include <boost/utility/enable_if.hpp>
-#   include <boost/type_traits/is_convertible.hpp>
 #endif
 
-//TODO is_convertible -> is_explicitly_convertible
-
 namespace boost { namespace fusion
 {
     // A half runtime pair where the first type does not have data
@@ -54,16 +54,19 @@
         {}
 #   else
         template<typename Arg>
-        pair(Arg&& arg);
+        pair(Arg&& arg,
+            typename enable_if<
+                detail::is_explicitly_convertible<Arg&&,second_type>
+            >::type* =0);
           : second(std::forward<Arg>(arg))
         {}
 #   endif
 #else
         template<typename Arg>
-        pair(BOOST_FUSION_R_ELSE_CLREF(Arg) arg
-          /*, typename enable_if<
-                is_convertible<BOOST_FUSION_R_ELSE_CLREF(Arg),second_type>
-            >::type* =0*/)
+        pair(BOOST_FUSION_R_ELSE_CLREF(Arg) arg,
+            typename enable_if<
+                detail::is_explicitly_convertible<Arg&&,second_type>
+            >::type* =0)
           : second(BOOST_FUSION_FORWARD(Arg,arg))
         {}
 
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -18,13 +18,13 @@
 #include <boost/fusion/support/deduce.hpp>
 #include <boost/fusion/support/internal/workaround.hpp>
 #include <boost/fusion/support/internal/sequence_assign.hpp>
+#include <boost/fusion/support/internal/is_explicitly_convertible.hpp>
 
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/int.hpp>
 #ifdef BOOST_NO_RVALUE_REFERENCES
 #   include <boost/call_traits.hpp>
 #endif
-#include <boost/type_traits/is_convertible.hpp>
 #include <boost/utility/enable_if.hpp>
 
 #include <boost/fusion/view/single_view/detail/single_view_fwd.hpp>
@@ -81,7 +81,10 @@
         explicit
         single_view(Arg&& val
           , typename enable_if<
-                is_convertible<BOOST_FUSION_R_ELSE_CLREF(Arg),value_type>
+                detail::is_explicitly_convertible<
+                    BOOST_FUSION_R_ELSE_CLREF(Arg)
+                  , value_type
+                >
             >::type* =0)
           : val(std::forward<Arg>(val))
         {}
@@ -90,7 +93,10 @@
         template<typename Arg>
         single_view(BOOST_FUSION_R_ELSE_CLREF(Arg) arg
           , typename enable_if<
-                is_convertible<BOOST_FUSION_R_ELSE_CLREF(Arg),value_type>
+                detail::is_explicitly_convertible<
+                    BOOST_FUSION_R_ELSE_CLREF(Arg)
+                  , value_type
+                >
             >::type* =0)
           : val(BOOST_FUSION_FORWARD(Arg,arg))
         {}
@@ -109,7 +115,10 @@
         single_view(
             BOOST_FUSION_R_ELSE_CLREF(Seq) seq
           , typename disable_if<
-                is_convertible<BOOST_FUSION_R_ELSE_CLREF(Seq), value_type>
+                detail::is_explicitly_convertible<
+                    BOOST_FUSION_R_ELSE_CLREF(Seq)
+                  , value_type
+                >
             >::type* =0)
           : val(fusion::front(BOOST_FUSION_FORWARD(Seq,seq)))
         {
Deleted: sandbox/SOC/2009/fusion/libs/fusion/example/extension/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/Jamfile	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
+++ (empty file)
@@ -1,20 +0,0 @@
-#==============================================================================
-#    Copyright (c) 2003-2006 Joel de Guzman
-#    Copyright (c) 2006 Dan Marsden
-#
-#   Use, modification and distribution is subject to the Boost Software
-#   License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-#   http://www.boost.org/LICENSE_1_0.txt)
-#==============================================================================
-
-# bring in rules for testing
-import testing ;
-
-{
-    test-suite example :
-
-    [ run test_example.cpp :  :  :  : ]
-    [ run triple.cpp :  :  :  : ]
-    ;
-}
-
Deleted: sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
+++ (empty file)
@@ -1,25 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2005-2006 Dan Marsden
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(BOOST_FUSION_EXAMPLE_STRUCT)
-#define BOOST_FUSION_EXAMPLE_STRUCT
-
-#include "./tag_of.hpp"
-#include "./example_struct_iterator.hpp"
-#include "./detail/begin_impl.hpp"
-#include "./detail/end_impl.hpp"
-#include "./detail/at_impl.hpp"
-#include "./detail/value_at_impl.hpp"
-#include "./detail/size_impl.hpp"
-#include "./detail/category_of_impl.hpp"
-#include "./detail/at_key_impl.hpp"
-#include "./detail/value_at_key_impl.hpp"
-#include "./detail/has_key_impl.hpp"
-#include "./detail/is_sequence_impl.hpp"
-#include "./detail/is_view_impl.hpp"
-
-#endif
Deleted: sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct_iterator.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
+++ (empty file)
@@ -1,64 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2005-2006 Dan Marsden
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(BOOST_FUSION_EXAMPLE_STRUCT_ITERATOR)
-#define BOOST_FUSION_EXAMPLE_STRUCT_ITERATOR
-
-#include <boost/fusion/support/iterator_base.hpp>
-#include <boost/fusion/support/tag_of_fwd.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/static_assert.hpp>
-
-#include "./detail/next_impl.hpp"
-#include "./detail/prior_impl.hpp"
-#include "./detail/deref_impl.hpp"
-#include "./detail/advance_impl.hpp"
-#include "./detail/distance_impl.hpp"
-#include "./detail/value_of_impl.hpp"
-#include "./detail/equal_to_impl.hpp"
-
-namespace example
-{
-    struct example_struct_iterator_tag;
-
-    template<typename Struct, int Pos>
-    struct example_struct_iterator;
-}
-
-namespace boost { namespace fusion {
-
-    struct random_access_traversal_tag;
-
-    namespace traits
-    {
-        template<typename Struct, int Pos>
-        struct tag_of<example::example_struct_iterator<Struct, Pos> >
-        {
-            typedef example::example_struct_iterator_tag type;
-        };
-    }
-}}
-    
-namespace example {
-    template<typename Struct, int Pos>
-    struct example_struct_iterator
-        : boost::fusion::iterator_base<example_struct_iterator<Struct, Pos> >
-    {
-        BOOST_STATIC_ASSERT(Pos >=0 && Pos < 3);
-        typedef Struct struct_type;
-        typedef boost::mpl::int_<Pos> index;
-        typedef boost::fusion::random_access_traversal_tag category;
-
-        example_struct_iterator(Struct& str)
-            : struct_(str) {}
-
-        Struct& struct_;
-    };
-}
-
-#endif
Deleted: sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct_type.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/example_struct_type.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
+++ (empty file)
@@ -1,27 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2006 Dan Marsden
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(BOOST_FUSION_EXAMPLE_STRUCT_TYPE)
-#define BOOST_FUSION_EXAMPLE_STRUCT_TYPE
-
-#include <string>
-
-namespace example
-{
-    struct example_struct
-    {
-        std::string name;
-        int age;
-        example_struct(
-            const std::string& n,
-            int a)
-            : name(n), age(a)
-        {}
-    };
-}
-
-#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/Jamfile
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/Jamfile	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,20 @@
+#==============================================================================
+#    Copyright (c) 2003-2006 Joel de Guzman
+#    Copyright (c) 2006 Dan Marsden
+#    Copyright (c) 2010 Christopher Schmidt
+#
+#   Use, modification and distribution is subject to the Boost Software
+#   License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+#   http://www.boost.org/LICENSE_1_0.txt)
+#==============================================================================
+
+# bring in rules for testing
+import testing ;
+
+{
+    test-suite example_struct :
+
+    [ run test_example.cpp :  :  :  : ]
+    ;
+}
+
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/advance_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/advance_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_ADVANCE_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_ADVANCE_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct advance_impl;
+
+    template<>
+    struct advance_impl<example::example_struct_iterator_tag>
+    {
+        template<typename ItRef, typename N>
+        struct apply
+        {
+            typedef typename detail::remove_reference<ItRef>::type it;
+
+            typedef
+                example::example_struct_iterator<
+                    typename it::struct_type
+                  , it::index::value + N::value
+                >
+            type;
+
+            static type
+            call(ItRef it)
+            {
+                return type(it.struct_);
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/at_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,67 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_AT_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_AT_IMPL_HPP
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct at_impl;
+
+    template<>
+    struct at_impl<example::example_sequence_tag>
+    {
+        template<typename SeqRef, typename N>
+        struct apply
+          : apply<SeqRef, mpl::int_<N::value> >
+        {};
+
+        template<typename SeqRef>
+        struct apply<SeqRef, mpl::int_<0> >
+        {
+            typedef typename
+                mpl::if_<
+                    is_const<typename detail::remove_reference<SeqRef>::type>
+                  , std::string const&
+                  , std::string&
+                >::type
+           type;
+
+            static type
+            call(SeqRef seq)
+            {
+                return seq.name;
+            };
+        };
+
+        template<typename SeqRef>
+        struct apply<SeqRef, mpl::int_<1> >
+        {
+            typedef typename
+                mpl::if_<
+                    is_const<typename detail::remove_reference<SeqRef>::type>
+                  , int const&
+                  , int&
+                >::type
+            type;
+
+            static type
+            call(SeqRef seq)
+            {
+                return seq.age;
+            };
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/at_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/at_key_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,38 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_AT_KEY_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_AT_KEY_IMPL_HPP
+
+#include "at_impl.hpp"
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct at_key_impl;
+
+    template<>
+    struct at_key_impl<example::example_sequence_tag>
+    {
+        template<typename SeqRef, typename Key>
+        struct apply;
+
+        template<typename SeqRef>
+        struct apply<SeqRef, fields::name>
+          : at_impl<example::example_sequence_tag>::apply<SeqRef, mpl::int_<0> >
+        {};
+
+        template<typename SeqRef>
+        struct apply<SeqRef, fields::age>
+          : at_impl<example::example_sequence_tag>::apply<SeqRef, mpl::int_<1> >
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/begin_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/begin_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_BEGIN_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_BEGIN_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct begin_impl;
+
+    template<>
+    struct begin_impl<example::example_sequence_tag>
+    {
+        template<typename SeqRef>
+        struct apply
+        {
+            typedef example::example_struct_iterator<SeqRef, 0> type;
+
+            static type
+            call(SeqRef seq)
+            {
+                return type(seq);
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/category_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/category_of_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_CATEGORY_OF_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_CATEGORY_OF_IMPL_HPP
+
+#include <boost/fusion/support/category_of.hpp>
+
+namespace boost { namespace fusion {
+
+    namespace extension
+    {
+        template<>
+        struct category_of_impl<example::example_sequence_tag>
+        {
+            template<typename SeqRef>
+            struct apply
+            {
+                struct type
+                  : random_access_traversal_tag, associative_tag
+                {};
+            };
+        };
+    }
+}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/deref_data_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/deref_data_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_DEREF_DATA_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_DEREF_DATA_IMPL_HPP
+
+#include "deref_impl.hpp"
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct deref_data_impl;
+
+    template<>
+    struct deref_data_impl<example::example_struct_iterator_tag>
+      : deref_impl<example::example_struct_iterator_tag>
+    {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/deref_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/deref_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,65 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_DEREF_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_DEREF_IMPL_HPP
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct deref_impl;
+
+    template<>
+    struct deref_impl<example::example_struct_iterator_tag>
+    {
+        template<typename ItRef>
+        struct apply
+        {
+            typedef typename detail::remove_reference<ItRef>::type it;
+            typedef typename
+                mpl::if_c<
+                    !it::index::value
+                  , std::string
+                  , int
+                >::type
+            attr_type;
+
+            typedef typename
+                mpl::if_<
+                    is_const<typename it::struct_type>
+                  , attr_type const&
+                  , attr_type&
+                >::type
+            type;
+
+            static type
+            call(ItRef it, mpl::true_)
+            {
+                return it.struct_.name;
+            }
+
+            static type
+            call(ItRef it, mpl::false_)
+            {
+                return it.struct_.age;
+            }
+
+            static type
+            call(ItRef it_)
+            {
+                return call(it_, mpl::bool_<!it::index::value>());
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/distance_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/distance_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_DISTANCE_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_DISTANCE_IMPL_HPP
+
+#include <boost/mpl/minus.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct distance_impl;
+
+    template<>
+    struct distance_impl<example::example_struct_iterator_tag>
+    {
+        template<typename It1Ref, typename It2Ref>
+        struct apply
+          : mpl::minus<
+                typename detail::remove_reference<It2Ref>::type::index
+              , typename detail::remove_reference<It1Ref>::type::index
+            >
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/end_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/end_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_END_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_END_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct end_impl;
+
+    template<>
+    struct end_impl<example::example_sequence_tag>
+    {
+        template<typename SeqRef>
+        struct apply
+        {
+            typedef example::example_struct_iterator<SeqRef, 2> type;
+
+            static type
+            call(SeqRef seq)
+            {
+                return type(seq);
+            }
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/equal_to_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/equal_to_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_EQUAL_TO_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_EQUAL_TO_IMPL_HPP
+
+#include <boost/mpl/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct equal_to_impl;
+
+    template<>
+    struct equal_to_impl<example::example_struct_iterator_tag>
+    {
+        template<typename It1Ref, typename It2Ref>
+        struct apply
+          : mpl::equal_to<
+                typename detail::remove_reference<It1Ref>::type::index
+              , typename detail::remove_reference<It2Ref>::type::index
+            >
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/example_struct_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/example_struct_iterator.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_EXAMPLE_STRUCT_ITERATOR_HPP
+#define EXTENSION_STRUCT_DETAIL_EXAMPLE_STRUCT_ITERATOR_HPP
+
+#include <boost/fusion/support.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+namespace example
+{
+    template<typename StructRef, int Pos>
+    struct example_struct_iterator
+      : boost::fusion::iterator_base<example_struct_iterator<StructRef, Pos> >
+    {
+        typedef StructRef struct_type;
+        typedef boost::mpl::int_<Pos> index;
+
+        typedef example::example_struct_iterator_tag fusion_tag;
+        struct category
+          : boost::fusion::random_access_traversal_tag
+          , boost::fusion::associative_tag
+        {};
+
+        example_struct_iterator(StructRef struct_)
+          : struct_(struct_)
+        {}
+
+        StructRef struct_;
+    };
+}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/has_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/has_key_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,33 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_HAS_KEY_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_HAS_KEY_IMPL_HPP
+
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct has_key_impl;
+
+    template<>
+    struct has_key_impl<example::example_sequence_tag>
+    {
+        template<typename SeqRef, typename Key>
+        struct apply
+          : mpl::or_<
+                is_same<Key, fields::name>
+              , is_same<Key, fields::age>
+            >
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/is_sequence_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/is_sequence_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_IS_SEQUENCE_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_IS_SEQUENCE_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct is_sequence_impl;
+
+    template<>
+    struct is_sequence_impl<example::example_sequence_tag>
+    {
+        template<typename T>
+        struct apply
+          : mpl::true_
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/is_view_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/is_view_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_IS_VIEW_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_IS_VIEW_IMPL_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct is_view_impl;
+
+    template<>
+    struct is_view_impl<example::example_sequence_tag>
+      : boost::mpl::false_
+    {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/key_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/key_of_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_KEY_OF_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_KEY_OF_IMPL_HPP
+
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct key_of_impl;
+
+    template<>
+    struct key_of_impl<example::example_struct_iterator_tag>
+    {
+        template<typename ItRef>
+        struct apply
+          : mpl::if_c<
+                !detail::remove_reference<ItRef>::type::index::value
+              , fields::name
+              , fields::age
+            >
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/next_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/next_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_NEXT_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_NEXT_IMPL_HPP
+
+#include "advance_impl.hpp"
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion {
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct next_impl;
+
+        template<>
+        struct next_impl<example::example_struct_iterator_tag>
+        {
+            template<typename ItRef>
+            struct apply
+              : advance_impl<example::example_struct_iterator_tag>::
+                    apply<ItRef, mpl::int_<1> >
+            {};
+        };
+    }
+}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/prior_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/prior_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_PRIOR_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_PRIOR_IMPL_HPP
+
+#include "advance_impl.hpp"
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion {
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct prior_impl;
+
+        template<>
+        struct prior_impl<example::example_struct_iterator_tag>
+        {
+            template<typename ItRef>
+            struct apply
+              : advance_impl<example::example_struct_iterator_tag>::
+                    apply<ItRef, mpl::int_<-1> >
+            {};
+        };
+    }
+}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/size_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/size_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_SIZE_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_SIZE_IMPL_HPP
+
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct size_impl;
+
+    template<>
+    struct size_impl<example::example_sequence_tag>
+    {
+        template<typename SeqRef>
+        struct apply
+          : mpl::int_<2>
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/tag_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/tag_of.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,74 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_TAG_OF_HPP
+#define EXTENSION_STRUCT_DETAIL_TAG_OF_HPP
+
+#include <boost/config.hpp>
+#include <boost/fusion/support/tag_of_fwd.hpp>
+#include <string>
+
+namespace fields
+{
+    struct name;
+    struct age;
+}
+
+namespace example
+{
+    struct example_struct;
+
+    template<typename Struct, int Pos>
+    struct example_struct_iterator;
+
+    struct example_sequence_tag;
+    struct example_struct_iterator_tag;
+}
+
+namespace boost { namespace fusion { namespace traits
+{
+    template<>
+    struct tag_of<example::example_struct>
+    {
+        typedef example::example_sequence_tag type;
+    };
+
+    template<>
+    struct tag_of<example::example_struct const>
+    {
+        typedef example::example_sequence_tag type;
+    };
+
+    template<>
+    struct tag_of<example::example_struct&>
+    {
+        typedef example::example_sequence_tag type;
+    };
+
+    template<>
+    struct tag_of<example::example_struct const&>
+    {
+        typedef example::example_sequence_tag type;
+    };
+
+#ifndef BOOST_NO_RVALUE_REFERENCES
+    template<>
+    struct tag_of<example::example_struct&&>
+    {
+        typedef example::example_sequence_tag type;
+    };
+
+    template<>
+    struct tag_of<example::example_struct const&&>
+    {
+        typedef example::example_sequence_tag type;
+    };
+#endif
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_at_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_at_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_VALUE_AT_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_VALUE_AT_IMPL_HPP
+
+namespace example
+{
+    struct example_sequence_tag;
+}
+
+namespace boost { namespace fusion {
+
+    namespace extension
+    {
+        template<typename Tag>
+        struct value_at_impl;
+
+        template<>
+        struct value_at_impl<example::example_sequence_tag>
+        {
+            template<typename Sequence, typename N>
+            struct apply;
+
+            template<typename Sequence>
+            struct apply<Sequence, mpl::int_<0> >
+            {
+                typedef std::string type;
+            };
+
+            template<typename Sequence>
+            struct apply<Sequence, mpl::int_<1> >
+            {
+                typedef int type;
+            };
+        };
+    }
+}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_at_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_at_key_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,36 @@
+/*=============================================================================
+    Copyright (c) 2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_VALUE_AT_KEY_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_VALUE_AT_KEY_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct value_at_key_impl;
+
+    template<>
+    struct value_at_key_impl<example::example_sequence_tag>
+    {
+        template<typename Sequence, typename N>
+        struct apply;
+
+        template<typename Sequence>
+        struct apply<Sequence, fields::name>
+        {
+            typedef std::string type;
+        };
+
+        template<typename Sequence>
+        struct apply<Sequence, fields::age>
+        {
+            typedef int type;
+        };
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_of_data_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_of_data_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_VALUE_OF_DATA_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_VALUE_OF_DATA_IMPL_HPP
+
+#include "value_of_impl.hpp"
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct value_of_data_impl;
+
+    template<>
+    struct value_of_data_impl<example::example_struct_iterator_tag>
+      : value_of_impl<example::example_struct_iterator_tag>
+    {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/detail/value_of_impl.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,33 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_DETAIL_VALUE_OF_IMPL_HPP
+#define EXTENSION_STRUCT_DETAIL_VALUE_OF_IMPL_HPP
+
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+    template<typename Tag>
+    struct value_of_impl;
+
+    template<>
+    struct value_of_impl<example::example_struct_iterator_tag>
+    {
+        template<typename ItRef>
+        struct apply
+          : mpl::if_c<
+                !detail::remove_reference<ItRef>::type::index::value
+              , std::string
+              , int
+            >
+        {};
+    };
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/example_struct.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/example_struct.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2005-2006 Dan Marsden
+    Copyright (c) 2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_EXAMPLE_STRUCT_HPP
+#define EXTENSION_STRUCT_EXAMPLE_STRUCT_HPP
+
+#include <boost/fusion/support/internal/ref.hpp>
+
+#include "detail/tag_of.hpp"
+
+#include "detail/at_impl.hpp"
+#include "detail/at_key_impl.hpp"
+#include "detail/begin_impl.hpp"
+#include "detail/category_of_impl.hpp"
+#include "detail/end_impl.hpp"
+#include "detail/has_key_impl.hpp"
+#include "detail/is_sequence_impl.hpp"
+#include "detail/is_view_impl.hpp"
+#include "detail/size_impl.hpp"
+#include "detail/value_at_impl.hpp"
+#include "detail/value_at_key_impl.hpp"
+
+#include "detail/example_struct_iterator.hpp"
+#include "detail/advance_impl.hpp"
+#include "detail/deref_data_impl.hpp"
+#include "detail/deref_impl.hpp"
+#include "detail/distance_impl.hpp"
+#include "detail/equal_to_impl.hpp"
+#include "detail/key_of_impl.hpp"
+#include "detail/next_impl.hpp"
+#include "detail/prior_impl.hpp"
+#include "detail/value_of_data_impl.hpp"
+#include "detail/value_of_impl.hpp"
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/example_struct_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/example_struct_type.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,27 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef EXTENSION_STRUCT_EXAMPLE_STRUCT_TYPE_HPP
+#define EXTENSION_STRUCT_EXAMPLE_STRUCT_TYPE_HPP
+
+#include <string>
+
+namespace example
+{
+    struct example_struct
+    {
+        std::string name;
+        int age;
+
+        example_struct(std::string const& name,int age)
+          : name(name), age(age)
+        {}
+    };
+}
+
+#endif
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/test_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/struct/test_example.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,67 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#include "example_struct.hpp"
+#include "example_struct_type.hpp"
+#include <boost/detail/lightweight_test.hpp>
+
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/iterator.hpp>
+#include <boost/fusion/support.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/assert.hpp>
+
+int main()
+{
+    example::example_struct bert("bert", 99);
+    using namespace boost::fusion;
+
+    BOOST_MPL_ASSERT((traits::is_associative<example::example_struct>));
+    BOOST_MPL_ASSERT((traits::is_random_access<example::example_struct>));
+    BOOST_MPL_ASSERT((traits::is_sequence<example::example_struct>));
+
+    BOOST_TEST(deref(begin(bert)) == "bert");
+    BOOST_TEST(deref_data(begin(bert)) == "bert");
+    BOOST_TEST(*next(begin(bert)) == 99);
+    BOOST_TEST(*prior(end(bert)) == 99);
+    BOOST_TEST(*advance_c<1>(begin(bert)) == 99);
+    BOOST_TEST(*advance_c<-1>(end(bert)) == 99);
+    BOOST_TEST(distance(begin(bert), end(bert)) == 2);
+
+    typedef result_of::begin<example::example_struct>::type first;
+    typedef result_of::next<first>::type second;
+    BOOST_MPL_ASSERT((boost::is_same<result_of::value_of<first>::type, std::string>));
+    BOOST_MPL_ASSERT((boost::is_same<result_of::value_of<second>::type, int>));
+    BOOST_MPL_ASSERT((boost::is_same<result_of::value_of_data<first>::type, std::string>));
+    BOOST_MPL_ASSERT((boost::is_same<result_of::value_of_data<second>::type, int>));
+    BOOST_MPL_ASSERT((boost::is_same<result_of::key_of<first>::type, fields::name>));
+    BOOST_MPL_ASSERT((boost::is_same<result_of::key_of<second>::type, fields::age>));
+
+    BOOST_TEST(begin(bert) != end(bert));
+    BOOST_TEST(advance_c<2>(begin(bert)) == end(const_cast<const example::example_struct&>(bert)));
+
+    BOOST_TEST(at_c<0>(bert) == "bert");
+    BOOST_TEST(at_c<1>(bert) == 99);
+
+    BOOST_TEST(at_key<fields::name>(bert) == "bert");
+    BOOST_TEST(at_key<fields::age>(bert) == 99);
+
+    BOOST_TEST(has_key<fields::name>(bert));
+    BOOST_TEST(has_key<fields::age>(bert));
+    BOOST_TEST(!has_key<int>(bert));
+
+    BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_c<example::example_struct, 0>::type, std::string>));
+    BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_c<example::example_struct, 1>::type, int>));
+
+    BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_key<example::example_struct, fields::name>::type, std::string>));
+    BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_key<example::example_struct, fields::age>::type, int>));
+
+    BOOST_TEST(size(bert) == 2);
+
+    return boost::report_errors();
+}
Deleted: sandbox/SOC/2009/fusion/libs/fusion/example/extension/tag_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/tag_of.hpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
+++ (empty file)
@@ -1,30 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2005-2006 Dan Marsden
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(BOOST_FUSION_TAG_OF_20060222_2052)
-#define BOOST_FUSION_TAG_OF_20060222_2052
-
-#include <boost/fusion/support/tag_of_fwd.hpp>
-#include "./example_struct_type.hpp"
-
-namespace example
-{
-    struct example_sequence_tag;
-}
-
-namespace boost { namespace fusion { 
-
-namespace traits {
-        
-    template<>
-    struct tag_of<example::example_struct>
-    {
-        typedef example::example_sequence_tag type;
-    };
-}}}
-
-#endif
Deleted: sandbox/SOC/2009/fusion/libs/fusion/example/extension/test_example.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/test_example.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
+++ (empty file)
@@ -1,62 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2006 Dan Marsden
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#include "./example_struct.hpp"
-#include "./example_struct_type.hpp"
-#include <boost/detail/lightweight_test.hpp>
-
-#include <boost/fusion/sequence/intrinsic.hpp>
-#include <boost/fusion/support/is_sequence.hpp>
-#include <boost/fusion/support/category_of.hpp>
-#include <boost/fusion/iterator.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/mpl/assert.hpp>
-
-int main()
-{
-    example::example_struct bert("bert", 99);
-    using namespace boost::fusion;
-
-    BOOST_MPL_ASSERT((traits::is_associative<example::example_struct>));
-    BOOST_MPL_ASSERT((traits::is_random_access<example::example_struct>));
-    BOOST_MPL_ASSERT((traits::is_sequence<example::example_struct>));
-
-    BOOST_TEST(deref(begin(bert)) == "bert");
-    BOOST_TEST(*next(begin(bert)) == 99);
-    BOOST_TEST(*prior(end(bert)) == 99);
-    BOOST_TEST(*advance_c<1>(begin(bert)) == 99);
-    BOOST_TEST(*advance_c<-1>(end(bert)) == 99);
-    BOOST_TEST(distance(begin(bert), end(bert)) == 2);
-
-    typedef result_of::begin<example::example_struct>::type first;
-    typedef result_of::next<first>::type second;
-    BOOST_MPL_ASSERT((boost::is_same<result_of::value_of<first>::type, std::string>));
-    BOOST_MPL_ASSERT((boost::is_same<result_of::value_of<second>::type, int>));
-
-    BOOST_TEST(begin(bert) != end(bert));
-    BOOST_TEST(advance_c<2>(begin(bert)) == end(const_cast<const example::example_struct&>(bert)));
-
-    BOOST_TEST(at_c<0>(bert) == "bert");
-    BOOST_TEST(at_c<1>(bert) == 99);
-
-    BOOST_TEST(at_key<fields::name>(bert) == "bert");
-    BOOST_TEST(at_key<fields::age>(bert) == 99);
-
-    BOOST_TEST(has_key<fields::name>(bert));
-    BOOST_TEST(has_key<fields::age>(bert));
-    BOOST_TEST(!has_key<int>(bert));
-
-    BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_c<example::example_struct, 0>::type, std::string>));
-    BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_c<example::example_struct, 1>::type, int>));
-
-    BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_key<example::example_struct, fields::name>::type, std::string>));
-    BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_key<example::example_struct, fields::age>::type, int>));
-
-    BOOST_TEST(size(bert) == 2);
-
-    return boost::report_errors();
-}
Deleted: sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
+++ (empty file)
@@ -1,319 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2006 Dan Marsden
-
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
-    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-/*=============================================================================
-    An implementation of a std::pair like triple<T0, T1, T2>
-    We use fusion::sequence_facade and fusion::iterator_facade
-    to make our triple a fully conforming Boost.Fusion random
-    traversal sequence.
-==============================================================================*/
-
-#include <boost/detail/lightweight_test.hpp>
-
-#include <boost/fusion/sequence/sequence_facade.hpp>
-#include <boost/fusion/iterator/iterator_facade.hpp>
-
-#include <boost/fusion/sequence/intrinsic.hpp>
-#include <boost/fusion/iterator.hpp>
-
-#include <boost/fusion/support/category_of.hpp>
-
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/minus.hpp>
-#include <boost/mpl/assert.hpp>
-
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <string>
-
-namespace mpl = boost::mpl;
-namespace fusion = boost::fusion;
-
-namespace demo
-{
-    template<typename Seq, int N>
-    struct triple_iterator
-        : fusion::iterator_facade<triple_iterator<Seq, N>, fusion::random_access_traversal_tag>
-    {
-        typedef mpl::int_<N> index;
-        typedef Seq sequence_type;
-
-        triple_iterator(Seq& seq)
-            : seq_(seq) {}
-
-        Seq& seq_;
-
-        template<typename T>
-        struct value_of;
-
-        template<typename Sq>
-        struct value_of<triple_iterator<Sq, 0> >
-            : mpl::identity<typename Sq::t0_type>
-        {};
-
-        template<typename Sq>
-        struct value_of<triple_iterator<Sq, 1> >
-            : mpl::identity<typename Sq::t1_type>
-        {};
-
-        template<typename Sq>
-        struct value_of<triple_iterator<Sq, 2> >
-            : mpl::identity<typename Sq::t2_type>
-        {};
-
-        template<typename T>
-        struct deref;
-
-        template <typename Sq>
-        struct deref<triple_iterator<Sq, 0> >
-        {
-            typedef typename
-                mpl::if_<
-                    boost::is_const<Sq>
-                  , typename Sq::t0_type const&
-                  , typename Sq::t0_type&
-                >::type
-            type;
-
-            static type
-            call(triple_iterator<Sq, 0> const& iter)
-            {
-                return iter.seq_.t0;
-            }
-        };
-
-        template <typename Sq>
-        struct deref<triple_iterator<Sq, 1> >
-        {
-            typedef typename
-                mpl::if_<
-                    boost::is_const<Sq>
-                  , typename Sq::t1_type const&
-                  , typename Sq::t1_type&
-                >::type
-            type;
-
-            static type
-            call(triple_iterator<Sq, 1> const& iter)
-            {
-                return iter.seq_.t1;
-            }
-        };
-
-        template <typename Sq>
-        struct deref<triple_iterator<Sq, 2> >
-        {
-            typedef typename
-                mpl::if_<
-                    boost::is_const<Sq>
-                  , typename Sq::t2_type const&
-                  , typename Sq::t2_type&
-                >::type
-            type;
-
-            static type
-            call(triple_iterator<Sq, 2> const& iter)
-            {
-                return iter.seq_.t2;
-            }
-        };
-
-        template<typename It>
-        struct next
-        {
-            typedef triple_iterator<
-                typename It::sequence_type, It::index::value + 1> type;
-
-            static type call(It const& it)
-            {
-                return type(it.seq_);
-            }
-        };
-
-        template<typename It>
-        struct prior
-        {
-            typedef triple_iterator<
-                typename It::sequence_type, It::index::value - 1> type;
-
-            static type call(It const& it)
-            {
-                return type(it.seq_);
-            }
-        };
-
-        template<typename It1, typename It2>
-        struct distance
-        {
-            typedef typename mpl::minus<typename It2::index, typename It1::index>::type type;
-
-            static type call(It1 const& it1, It2 const& it2)
-            {
-                return type();
-            }
-        };
-
-        template<typename It, typename M>
-        struct advance
-        {
-            typedef triple_iterator<
-                typename It::sequence_type,
-                It::index::value + M::value> type;
-
-            static type call(It const& it)
-            {
-                return type(it.seq_);
-            }
-        };
-    };
-
-    template<typename T0, typename T1, typename T2>
-    struct triple
-        : fusion::sequence_facade<triple<T0, T1, T2>, fusion::random_access_traversal_tag>
-    {
-        triple(T0 const& t0, T1 const& t1, T2 const& t2)
-            : t0(t0), t1(t1), t2(t2)
-        {}
-
-        template<typename Sq>
-        struct begin
-        {
-            typedef demo::triple_iterator<
-                Sq, 0> type;
-
-            static type call(Sq& sq)
-            {
-                return type(sq);
-            }
-        };
-
-        template<typename Sq>
-        struct end
-        {
-            typedef demo::triple_iterator<
-                Sq, 3> type;
-
-            static type call(Sq& sq)
-            {
-                return type(sq);
-            }
-        };
-
-        template<typename Sq>
-        struct size
-            : mpl::int_<3>
-        {};
-
-        template<typename Sq, typename N>
-        struct value_at
-            : value_at<Sq, mpl::int_<N::value> >
-        {};
-
-        template<typename Sq>
-        struct value_at<Sq, mpl::int_<0> >
-        {
-            typedef typename Sq::t0_type type;
-        };
-
-        template<typename Sq>
-        struct value_at<Sq, mpl::int_<1> >
-        {
-            typedef typename Sq::t1_type type;
-        };
-
-        template<typename Sq>
-        struct value_at<Sq, mpl::int_<2> >
-        {
-            typedef typename Sq::t2_type type;
-        };
-
-        template<typename Sq, typename N>
-        struct at
-            : at<Sq, mpl::int_<N::value> >
-        {};
-
-        template<typename Sq>
-        struct at<Sq, mpl::int_<0> >
-        {
-            typedef typename
-                mpl::if_<
-                    boost::is_const<Sq>
-                  , typename Sq::t0_type const&
-                  , typename Sq::t0_type&
-                >::type
-            type;
-
-            static type call(Sq& sq)
-            {
-                return sq.t0;
-            }
-        };
-
-        template<typename Sq>
-        struct at<Sq, mpl::int_<1> >
-        {
-            typedef typename
-                mpl::if_<
-                    boost::is_const<Sq>
-                  , typename Sq::t1_type const&
-                  , typename Sq::t1_type&
-                >::type
-            type;
-
-            static type call(Sq& sq)
-            {
-                return sq.t1;
-            }
-        };
-
-        template<typename Sq>
-        struct at<Sq, mpl::int_<2> >
-        {
-            typedef typename
-                mpl::if_<
-                    boost::is_const<Sq>
-                  , typename Sq::t2_type const&
-                  , typename Sq::t2_type&
-                >::type
-            type;
-
-            static type call(Sq& sq)
-            {
-                return sq.t2;
-            }
-        };
-
-        typedef T0 t0_type;
-        typedef T1 t1_type;
-        typedef T2 t2_type;
-
-        T0 t0;
-        T1 t1;
-        T2 t2;
-    };
-}
-
-int main()
-{
-    typedef demo::triple<int, char, std::string> my_triple;
-    my_triple t(101, 'a', "hello");
-    BOOST_TEST(*fusion::begin(t) == 101);
-    BOOST_TEST(*fusion::next(fusion::begin(t)) == 'a');
-    BOOST_TEST(*fusion::prior(fusion::end(t)) == "hello");
-    BOOST_TEST(fusion::distance(fusion::begin(t), fusion::end(t)) == 3);
-    BOOST_TEST(fusion::size(t) == 3);
-    BOOST_MPL_ASSERT((boost::is_same<int, fusion::result_of::value_at_c<my_triple, 0>::type>));
-    BOOST_MPL_ASSERT((boost::is_same<char, fusion::result_of::value_at_c<my_triple, 1>::type>));
-    BOOST_MPL_ASSERT((boost::is_same<std::string, fusion::result_of::value_at_c<my_triple, 2>::type>));
-    BOOST_TEST(fusion::at_c<0>(t) == 101);
-    BOOST_TEST(fusion::at_c<1>(t) == 'a');
-    BOOST_TEST(fusion::at_c<2>(t) == "hello");
-    return boost::report_errors();
-}
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/Jamfile
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/Jamfile	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,20 @@
+#==============================================================================
+#    Copyright (c) 2003-2006 Joel de Guzman
+#    Copyright (c) 2006 Dan Marsden
+#    Copyright (c) 2010 Christopher Schmidt
+#
+#   Use, modification and distribution is subject to the Boost Software
+#   License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+#   http://www.boost.org/LICENSE_1_0.txt)
+#==============================================================================
+
+# bring in rules for testing
+import testing ;
+
+{
+    test-suite example_triple :
+
+    [ run triple.cpp :  :  :  : ]
+    ;
+}
+
Added: sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/triple.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/extension/triple/triple.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -0,0 +1,343 @@
+/*=============================================================================
+    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2006 Dan Marsden
+    Copyright (c) 2010 Christopher Schmidt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+/*=============================================================================
+    An implementation of a std::pair like triple<T0, T1, T2>
+    We use fusion::sequence_facade and fusion::iterator_facade
+    to make our triple a fully conforming Boost.Fusion random
+    traversal sequence.
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/iterator.hpp>
+#include <boost/fusion/support.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <string>
+
+namespace mpl = boost::mpl;
+namespace fusion = boost::fusion;
+
+namespace demo
+{
+    template<typename SeqRef, int N>
+    struct triple_iterator
+      : fusion::iterator_facade<
+            triple_iterator<SeqRef, N>
+          , fusion::random_access_traversal_tag
+        >
+    {
+        typedef mpl::int_<N> index;
+        typedef SeqRef seq_type;
+        //TODO
+        typedef typename
+            fusion::detail::remove_reference<SeqRef>::type
+        seq_nonref_type;
+
+        triple_iterator(SeqRef seq)
+          : seq(seq)
+        {}
+
+        SeqRef seq;
+
+        template<typename ItRef>
+        struct value_of;
+
+        template<typename ItRef>
+        struct value_of<ItRef&>
+          : value_of<ItRef>
+        {};
+
+#ifndef BOOST_NO_RVALUE_REFERENCES
+        template<typename ItRef>
+        struct value_of<ItRef&&>
+          : value_of<ItRef>
+        {};
+#endif
+
+        template<typename SeqRef_>
+        struct value_of<triple_iterator<SeqRef_, 0> >
+        {
+            typedef typename seq_nonref_type::t0_type type;
+        };
+
+        template<typename SeqRef_>
+        struct value_of<triple_iterator<SeqRef_, 1> >
+        {
+            typedef typename seq_nonref_type::t1_type type;
+        };
+
+        template<typename SeqRef_>
+        struct value_of<triple_iterator<SeqRef_, 2> >
+        {
+            typedef typename seq_nonref_type::t2_type type;
+        };
+
+        template<typename ItRef>
+        struct deref;
+
+        template<typename ItRef>
+        struct deref<ItRef const>
+          : deref<ItRef>
+        {};
+
+        template<typename ItRef>
+        struct deref<ItRef&>
+          : deref<ItRef>
+        {};
+
+#ifndef BOOST_NO_RVALUE_REFERENCES
+        template<typename ItRef>
+        struct deref<ItRef&&>
+          : deref<ItRef>
+        {};
+#endif
+
+        template<typename SeqRef_>
+        struct deref<triple_iterator<SeqRef_, 0> >
+        {
+            typedef typename
+                mpl::if_<
+                    boost::is_const<seq_nonref_type>
+                  , typename seq_nonref_type::t0_type const&
+                  , typename seq_nonref_type::t0_type&
+                >::type
+            type;
+
+            static type
+            call(triple_iterator<SeqRef, 0> const& iter)
+            {
+                return iter.seq.t0;
+            }
+        };
+
+        template<typename SeqRef_>
+        struct deref<triple_iterator<SeqRef_, 1> >
+        {
+            typedef typename
+                mpl::if_<
+                    boost::is_const<seq_nonref_type>
+                  , typename seq_nonref_type::t1_type const&
+                  , typename seq_nonref_type::t1_type&
+                >::type
+            type;
+
+            static type
+            call(triple_iterator<SeqRef, 1> const& iter)
+            {
+                return iter.seq.t1;
+            }
+        };
+
+        template<typename SeqRef_>
+        struct deref<triple_iterator<SeqRef_, 2> >
+        {
+            typedef typename
+                mpl::if_<
+                    boost::is_const<seq_nonref_type>
+                  , typename seq_nonref_type::t2_type const&
+                  , typename seq_nonref_type::t2_type&
+                >::type
+            type;
+
+            static type
+            call(triple_iterator<SeqRef, 2> const& iter)
+            {
+                return iter.seq.t2;
+            }
+        };
+
+        template<typename ItRef1, typename ItRef2>
+        struct distance
+          : mpl::minus<
+                typename fusion::detail::remove_reference<ItRef2>::type::index
+              , typename fusion::detail::remove_reference<ItRef1>::type::index
+            >
+        {};
+
+        template<typename ItRef, typename M>
+        struct advance
+        {
+            typedef
+                triple_iterator<
+                    seq_type,
+                    N + M::value
+                >
+            type;
+
+            static type
+            call(ItRef it)
+            {
+                return type(it.seq);
+            }
+        };
+
+        template<typename ItRef>
+        struct next
+          : advance<ItRef, mpl::int_<1> >
+        {};
+
+        template<typename ItRef>
+        struct prior
+          : advance<ItRef, mpl::int_<-1> >
+        {};
+    };
+
+    template<typename T0, typename T1, typename T2>
+    struct triple
+      : fusion::sequence_facade<
+            triple<T0, T1, T2>
+          , fusion::random_access_traversal_tag
+        >
+    {
+        typedef T0 t0_type;
+        typedef  T1 t1_type;
+        typedef T2 t2_type;
+
+        triple(T0 const& t0, T1 const& t1, T2 const& t2)
+          : t0(t0), t1(t1), t2(t2)
+        {}
+
+        template<typename SeqRef>
+        struct begin
+        {
+            typedef demo::triple_iterator<SeqRef, 0> type;
+
+            static type
+            call(SeqRef seq)
+            {
+                return type(seq);
+            }
+        };
+
+        template<typename SeqRef>
+        struct end
+        {
+            typedef demo::triple_iterator<SeqRef, 3> type;
+
+            static type call(SeqRef seq)
+            {
+                return type(seq);
+            }
+        };
+
+        template<typename SeqRef>
+        struct size
+          : mpl::int_<3>
+        {};
+
+        template<typename SeqRef, typename N>
+        struct value_at
+          : value_at<SeqRef, mpl::int_<N::value> >
+        {};
+
+        template<typename SeqRef>
+        struct value_at<SeqRef, mpl::int_<0> >
+        {
+            typedef T0 type;
+        };
+
+        template<typename SeqRef>
+        struct value_at<SeqRef, mpl::int_<1> >
+        {
+            typedef T1 type;
+        };
+
+        template<typename SeqRef>
+        struct value_at<SeqRef, mpl::int_<2> >
+        {
+            typedef T2 type;
+        };
+
+        template<typename SeqRef, typename N>
+        struct at
+          : at<SeqRef, mpl::int_<N::value> >
+        {};
+
+        template<typename SeqRef>
+        struct at<SeqRef, mpl::int_<0> >
+        {
+            typedef typename fusion::detail::remove_reference<SeqRef>::type seq;
+
+            typedef typename
+                mpl::if_<boost::is_const<seq>, T0 const&, T0&>::type
+            type;
+
+            static type
+            call(SeqRef seq)
+            {
+                return seq.t0;
+            }
+        };
+
+        template<typename SeqRef>
+        struct at<SeqRef, mpl::int_<1> >
+        {
+            typedef typename fusion::detail::remove_reference<SeqRef>::type seq;
+
+            typedef typename
+                mpl::if_<boost::is_const<seq>, T1 const&, T1&>::type
+            type;
+
+            static type
+            call(SeqRef seq)
+            {
+                return seq.t1;
+            }
+        };
+
+        template<typename SeqRef>
+        struct at<SeqRef, mpl::int_<2> >
+        {
+            typedef typename fusion::detail::remove_reference<SeqRef>::type seq;
+
+            typedef typename
+                mpl::if_<boost::is_const<seq>, T2 const&, T2&>::type
+            type;
+
+            static type
+            call(SeqRef seq)
+            {
+                return seq.t2;
+            }
+        };
+
+        T0 t0;
+        T1 t1;
+        T2 t2;
+    };
+}
+
+int main()
+{
+    typedef demo::triple<int, char, std::string> my_triple;
+    my_triple t(101, 'a', "hello");
+
+    BOOST_TEST(*fusion::begin(t) == 101);
+    BOOST_TEST(*fusion::next(fusion::begin(t)) == 'a');
+    BOOST_TEST(*fusion::prior(fusion::end(t)) == "hello");
+    BOOST_TEST(fusion::distance(fusion::begin(t), fusion::end(t)) == 3);
+    BOOST_TEST(fusion::size(t) == 3);
+
+    BOOST_MPL_ASSERT((boost::is_same<int, fusion::result_of::value_at_c<my_triple, 0>::type>));
+    BOOST_MPL_ASSERT((boost::is_same<char, fusion::result_of::value_at_c<my_triple, 1>::type>));
+    BOOST_MPL_ASSERT((boost::is_same<std::string, fusion::result_of::value_at_c<my_triple, 2>::type>));
+
+    BOOST_TEST(fusion::at_c<0>(t) == 101);
+    BOOST_TEST(fusion::at_c<1>(t) == 'a');
+    BOOST_TEST(fusion::at_c<2>(t) == "hello");
+
+    return boost::report_errors();
+}
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/Jamfile
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/Jamfile	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/Jamfile	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -1,10 +1,11 @@
-##==============================================================================
+##=============================================================================
 #    Copyright (c) 2003-2006 Joel de Guzman
 #
 #   Use, modification and distribution is subject to the Boost Software
 #   License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 #   http://www.boost.org/LICENSE_1_0.txt)
 #==============================================================================
+
 # bring in rules for testing
 import testing ;
 
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/fold.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/fold.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/fold.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -39,4 +39,4 @@
   }
 }
 
-#include "./driver.hpp"
+#include "driver.hpp"
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/transform.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/transform.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/transform.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -52,4 +52,4 @@
   }
 }
 
-#include "./driver.hpp"
+#include "driver.hpp"
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_construction.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_construction.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_construction.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -25,4 +25,4 @@
   }
 }
 
-#include "./driver.hpp"
+#include "driver.hpp"
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_intrinsic.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_intrinsic.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_intrinsic.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -56,4 +56,4 @@
   }
 }
 
-#include "./driver.hpp"
+#include "driver.hpp"
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_iteration.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_iteration.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/compile_time/vector_iteration.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -35,4 +35,4 @@
   }
 }
 
-#include "./driver.hpp"
+#include "driver.hpp"
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -9,7 +9,7 @@
 #define FUSION_SEQUENCE list
 #define FUSION_NO_PRIOR
 #define FUSION_TRAVERSAL_TAG forward_traversal_tag
-#include "./iterator.hpp"
+#include "iterator.hpp"
 
 int
 main()
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/sequence/vector_iterator.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/sequence/vector_iterator.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/sequence/vector_iterator.cpp	2010-03-06 15:28:04 EST (Sat, 06 Mar 2010)
@@ -8,7 +8,7 @@
 
 #define FUSION_SEQUENCE vector
 #define FUSION_TRAVERSAL_TAG random_access_traversal_tag
-#include "./iterator.hpp"
+#include "iterator.hpp"
 
 int
 main()