[prev in list] [next in list] [prev in thread] [next in thread] 

List:       boost-commit
Subject:    [Boost-commit] svn:boost r64489 - in sandbox/SOC/2009/fusion:
From:       mr.chr.schmidt () online ! de
Date:       2010-07-30 21:48:18
Message-ID: 20100730214818.CEEA32F8491 () wowbagger ! osl ! iu ! edu
[Download RAW message or body]

Author: cschmidt
Date: 2010-07-30 17:48:11 EDT (Fri, 30 Jul 2010)
New Revision: 64489
URL: http://svn.boost.org/trac/boost/changeset/64489

Log:
updates
Text files modified: 
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/class/adapt_base.hpp           \
|     7 +                                         \
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/class/extension.hpp               \
|     6 -                                         \
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_base.hpp             \
|     5 +                                         \
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp                \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/deref_impl.hpp             \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp              \
|    10 ++                                        \
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_impl.hpp          \
|     5 +                                         \
sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_of_impl.hpp          \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/begin_impl.hpp             \
|    32 +++++++                                   \
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_iterator.hpp          \
|    44 +----------                               \
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/end_impl.hpp               \
|     4                                           \
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/next_impl.hpp              \
|    30 +++++++                                   \
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp           \
|     5                                           \
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp             \
|     5                                           \
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp        \
|     4                                           \
sandbox/SOC/2009/fusion/boost/fusion/support/internal/is_explicitly_convertible.hpp   \
|     3                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp                     \
|   146 ++++++++++++++++++++-------------------   \
sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/begin_impl.hpp           \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/end_impl.hpp             \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/begin_impl.hpp            \
|     7 -                                         \
sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/end_impl.hpp              \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp                   \
|    10 +-                                        \
sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/at_impl.hpp                    \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/begin_impl.hpp                 \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/end_impl.hpp                   \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/begin_impl.hpp       \
|     7 +                                         \
sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/end_impl.hpp         \
|    11 +-                                        \
sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/next_impl.hpp        \
|    10 +-                                        \
sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/prior_impl.hpp       \
|    15 ++-                                       \
sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/repetitive_view_iterator.hpp \
|    10 +-                                        \
sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/repetitive_view.hpp         \
|     1                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/at_impl.hpp             \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/begin_impl.hpp          \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/end_impl.hpp            \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp           \
|     5 +                                         \
sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/end_impl.hpp             \
|     5 +                                         \
sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/next_impl.hpp            \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/prior_impl.hpp           \
|     2                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_iterator.hpp \
|    35 +++++----                                 \
sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp           \
|     6                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/begin_impl.hpp        \
|     6                                           \
sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp        \
|     9 +-                                        \
sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/end_impl.hpp          \
|     8 +-                                        \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/all.cpp                     \
|     6                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/any.cpp                     \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/count.cpp                   \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/count_if.cpp                \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/none.cpp                    \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/replace_if.cpp              \
|     2                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_class.cpp        \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_class_named.cpp  \
|     6                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_struct.cpp       \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_struct_named.cpp \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_tpl_class.cpp    \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_tpl_struct.cpp   \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_class.cpp              \
|    48 ++++++++++++                              \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_class_named.cpp        \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_struct.cpp             \
|    32 ++++++++                                  \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_struct_named.cpp       \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_tpl_class.cpp          \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_tpl_struct.cpp         \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/comparison.hpp               \
|     2                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_assoc_struct.cpp      \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_assoc_tpl_struct.cpp  \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_struct.cpp            \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_tpl_struct.cpp        \
|     4                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/tr1_tuple_auto_conv.cpp      \
|     2                                           \
sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/vector_n.cpp                 \
|     9 +-                                        69 files changed, 389 \
insertions(+), 267 deletions(-)

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/class/adapt_base.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/class/adapt_base.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/class/adapt_base.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -37,7 +37,7 @@
     template<                                                                   \
         BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ)   \
     >                                                                           \
-    struct class_member_proxy<                                                  \
+    struct access::class_member_proxy<                                          \
         BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)                         \
       , I                                                                       \
     >                                                                           \
@@ -75,7 +75,10 @@
     template<                                                                   \
         BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ)   \
     >                                                                           \
-    struct struct_member<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ), I>    \
+    struct access::struct_member<                                               \
+        BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)                         \
+      , I                                                                       \
+    >                                                                           \
     {                                                                           \
         typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) lvalue; \
                                                                                 \

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/class/extension.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/class/extension.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/class/extension.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -19,12 +19,6 @@
           : identity<T>
         {};
     }
-
-    namespace extension
-    {
-        template<typename T, int N>
-        struct class_member_proxy;
-    }
 }}
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_base.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_base.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/adapt_base.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -89,7 +89,10 @@
     template<                                                                   \
         BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ)   \
     >                                                                           \
-    struct struct_member<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ), I>    \
+    struct access::struct_member<                                               \
+        BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)                         \
+      , I                                                                       \
+    >                                                                           \
     {                                                                           \
         typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) type;   \
                                                                                 \

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -22,7 +22,7 @@
     {
         template<typename Seq, typename N>
         struct apply
-          : extension::struct_member<
+          : extension::access::struct_member<
                 typename detail::identity<Seq>::type
               , N::value
             >::template apply<Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/deref_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/deref_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/deref_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -21,7 +21,7 @@
         {
            typedef typename detail::remove_reference<It>::type it;
            typedef typename
-               extension::struct_member<
+               extension::access::struct_member<
                    typename detail::identity<typename it::seq_type>::type
                  , it::index::value
                >::template apply<typename it::seq_type>

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -27,8 +27,14 @@
     {
         struct no_such_member;
 
-        template<typename Seq, int N>
-        struct struct_member;
+        struct access
+        {
+            template<typename Seq, int N>
+            struct struct_member;
+
+            template<typename T, int N>
+            struct class_member_proxy;
+        };
 
         template<typename Seq, int N>
         struct struct_member_name;

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_at_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -20,7 +20,10 @@
     {
         template<typename Seq, typename N>
         struct apply
-          : struct_member<typename detail::identity<Seq>::type, N::value>
+          : access::struct_member<
+                typename detail::identity<Seq>::type
+              , N::value
+            >
         {};
     };
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_of_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_of_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/value_of_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -22,7 +22,7 @@
             typedef typename detail::remove_reference<It>::type it;
 
             typedef typename
-                extension::struct_member<
+                extension::access::struct_member<
                     typename detail::identity<typename it::seq_type>::type
                   , it::index::value
                 >::type

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -34,7 +34,7 @@
             static type
             call(Seq seq)
             {
-                return at_key<Key>(seq.seq.get());
+                return at_key<Key>(seq.seq.template get<Seq>());
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/begin_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,6 +1,7 @@
 /*==============================================================================
     Copyright (c) 2005 Joel de Guzman
     Copyright (c) 2005 Eric Niebler
+    Copyright (c) 2009-2010 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -9,6 +10,11 @@
 #ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_BEGIN_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_LIST_DETAIL_BEGIN_IMPL_HPP
 
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/addressof.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template<typename>
@@ -20,12 +26,32 @@
         template<typename Seq>
         struct apply
         {
-            typedef cons_iterator<typename detail::add_lref<Seq>::type> type;
+            typedef typename result_of::empty<Seq>::type empty;
+
+            typedef typename
+                mpl::if_<
+                    empty
+                  , nil_iterator
+                  , cons_iterator<typename detail::add_lref<Seq>::type>
+                >::type
+            type;
+
+            static type
+            call(Seq seq, mpl::false_)
+            {
+                return type(boost::addressof(seq), 0);
+            }
+
+            static type
+            call(Seq, mpl::true_)
+            {
+                return type();
+            }
 
             static type
-            call(Seq t)
+            call(Seq seq)
             {
-                return type(static_cast<Seq>(t),0);
+                return call(static_cast<Seq>(seq), empty());
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_iterator.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_iterator.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons_iterator.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,7 +1,7 @@
 /*==============================================================================
     Copyright (c) 2005 Joel de Guzman
     Copyright (c) 2005 Eric Niebler
-    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)
@@ -25,14 +25,15 @@
         typedef cons_iterator_tag fusion_tag;
         typedef forward_traversal_tag category;
         typedef ConsRef cons_type;
+        typedef typename detail::remove_reference<ConsRef>::type* cons_ptr_type;
 
         template<typename OtherConsRef>
         cons_iterator(cons_iterator<OtherConsRef> const& it)
           : cons(it.cons)
         {}
 
-        cons_iterator(cons_type cons, int)
-          : cons(&cons)
+        cons_iterator(cons_ptr_type cons, int)
+          : cons(cons)
         {}
 
         template<typename OtherConsRef>
@@ -43,7 +44,7 @@
             return *this;
         }
 
-        typename detail::remove_reference<cons_type>::type* cons;
+        cons_ptr_type cons;
     };
 
     struct nil_iterator
@@ -52,42 +53,7 @@
         typedef forward_traversal_tag category;
         typedef cons_iterator_tag fusion_tag;
         typedef nil cons_type;
-
-        nil_iterator()
-        {}
-
-        nil_iterator(nil const&,int)
-        {}
     };
-
-#define BOOST_FUSION_NIL_ITERATOR(MODIFIER,_)\
-      template<>\
-      struct cons_iterator<nil MODIFIER>\
-        : nil_iterator\
-      {\
-          cons_iterator()\
-          {}\
-          \
-          explicit\
-          cons_iterator(nil MODIFIER, int)\
-          {}\
-      };\
-      \
-      template<>\
-      struct cons_iterator<list<> MODIFIER>\
-        : nil_iterator\
-      {\
-          cons_iterator()\
-          {}\
-          \
-          explicit\
-          cons_iterator(nil MODIFIER, int)\
-          {}\
-      };
-
-    BOOST_FUSION_ALL_CV_REF_COMBINATIONS(BOOST_FUSION_NIL_ITERATOR,_)
-
-#undef BOOST_FUSION_NIL_ITERATOR
 }}
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/end_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -20,9 +20,7 @@
         template<typename Seq>
         struct apply
         {
-            typedef
-                cons_iterator<typename detail::forward_as<Seq,nil>::type>
-            type;
+            typedef nil_iterator type;
 
             static type
             call(Seq)

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/next_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/next_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,7 +1,7 @@
 /*==============================================================================
     Copyright (c) 2005 Joel de Guzman
     Copyright (c) 2005 Eric Niebler
-    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,6 +10,11 @@
 #ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_NEXT_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_LIST_DETAIL_NEXT_IMPL_HPP
 
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/addressof.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template<typename>
@@ -32,13 +37,32 @@
                     >::type::cdr_type
                 >::type
             cdr_type;
+            typedef typename result_of::empty<cdr_type>::type empty;
+
+            typedef typename
+                mpl::if_<
+                    empty
+                  , nil_iterator
+                  , cons_iterator<cdr_type>
+                >::type
+            type;
 
-            typedef cons_iterator<cdr_type> type;
+            static type
+            call(It, mpl::true_)
+            {
+                return type();
+            }
+
+            static type
+            call(It it, mpl::false_)
+            {
+                return type(boost::addressof(it.cons->cdr),0);
+            }
 
             static type
             call(It it)
             {
-                return type(static_cast<cdr_type>(it.cons->cdr),0);
+                return call(it, empty());
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,6 +1,6 @@
 /*==============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -10,6 +10,7 @@
 #define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_BEGIN_IMPL_HPP
 
 #include <boost/fusion/iterator/basic_iterator.hpp>
+#include <boost/utility/addressof.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -34,7 +35,7 @@
             static type
             call(Seq seq)
             {
-                return type(&seq);
+                return type(boost::addressof(seq));
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,6 +1,6 @@
 /*==============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009ö-2010 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -10,6 +10,7 @@
 #define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_END_IMPL_HPP
 
 #include <boost/fusion/iterator/basic_iterator.hpp>
+#include <boost/utility/addressof.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -34,7 +35,7 @@
             static type
             call(Seq seq)
             {
-                return type(&seq);
+                return type(boost::addressof(seq));
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -69,8 +69,8 @@
             >::type* =NULL)
         {
             return do_get_pointer(
-                    BOOST_FUSION_FORWARD(T,t),
-                    boost::addressof(BOOST_FUSION_FORWARD(T,t)));
+                BOOST_FUSION_FORWARD(T,t),
+                boost::addressof(t));
         }
     };
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/internal/is_explicitly_convertible.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/internal/is_explicitly_convertible.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/is_explicitly_convertible.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -10,7 +10,7 @@
 
 #include <boost/detail/workaround.hpp>
 #include <boost/type_traits/is_convertible.hpp>
-#if BOOST_WORKAROUND(__GNUC__,>=4)
+#if !BOOST_WORKAROUND(__GNUC__,<4) && !defined(BOOST_MSVC)
 #   include <boost/mpl/or.hpp>
 #   include <boost/fusion/support/internal/small_big_type.hpp>
 #   include <boost/mpl/bool.hpp>
@@ -20,6 +20,7 @@
 namespace boost { namespace fusion { namespace detail
 {
 //cschmidt: Fall back due to a defect in gcc 3.x's call_expr...
+//... and a bug in MSVC
 #if BOOST_WORKAROUND(__GNUC__,<4) || defined(BOOST_MSVC)
     template<typename From, typename To>
     struct is_explicitly_convertible

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,5 +1,5 @@
 /*==============================================================================
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -11,55 +11,82 @@
 #include <boost/fusion/support/is_view.hpp>
 #include <boost/fusion/support/internal/ref.hpp>
 
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
 namespace boost { namespace fusion { namespace detail
 {
-    template<typename T>
-    struct view_storage
+    template<typename T, bool IsView=traits::is_view<T>::type::value>
+    struct view_storage;
+
+    template<typename View>
+    struct view_storage<View, /*IsView*/true>
     {
-    private:
-        template<typename OtherT>
-        static BOOST_FUSION_R_ELSE_CLREF(OtherT)
-        get_init_type(BOOST_FUSION_R_ELSE_LREF(OtherT) other_t, mpl::true_)
+        typedef typename
+            remove_const<typename remove_reference<View>::type>::type
+        type;
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        typedef type const& call_param;
+#endif
+
+#define BOOST_FUSION_VIEW_STORAGE_CTOR(MODIFIER,_)\
+        template<typename OtherT, bool IsView>\
+        view_storage(view_storage<OtherT, IsView> MODIFIER storage)\
+          : view(storage.template get<view_storage<OtherT, IsView> MODIFIER>())\
+        {}
+
+        BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_VIEW_STORAGE_CTOR,_)
+
+#undef BOOST_FUSION_VIEW_STORAGE_CTOR
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+        view_storage(call_param view)
+          : view(view)
+        {}
+#else
+        template<typename OtherView>
+        view_storage(OtherView&& view)
+          : view(std::forward<OtherView>(view))
+        {}
+#endif
+
+        template<typename OtherViewStorage>
+        view_storage&
+        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherViewStorage) other_storage)
         {
-            return BOOST_FUSION_FORWARD(OtherT,other_t);
+            view=other_storage.template get<OtherViewStorage>();
+            return *this;
         }
 
-        template<typename OtherT>
-        static typename remove_reference<OtherT>::type*
-        get_init_type(BOOST_FUSION_R_ELSE_LREF(OtherT) other_t, mpl::false_)
+        //workaround until we get rvalue refs for this
+        template<typename SelfType>
+        typename forward_as<SelfType, type>::type
+        get()
         {
-            return &other_t;
+            return static_cast<typename forward_as<SelfType, type>::type>(view);
         }
 
-    public:
-        typedef T arg_type;
-        typedef typename
-            mpl::if_<
-                traits::is_view<T>
-              , typename remove_reference<T>::type
-              , typename add_lref<T>::type
-            >::type
-        type;
+        template<typename SelfType>
+        typename forward_as<SelfType, type const>::type
+        get()const
+        {
+            return static_cast<
+                typename forward_as<SelfType, type const>::type
+            >(view);
+        }
+
+        type view;
+    };
 
+    template<typename Seq>
+    struct view_storage<Seq, /*IsView*/false>
+    {
+        typedef typename add_lref<Seq>::type type;
 #ifdef BOOST_NO_RVALUE_REFERENCES
-        typedef typename
-            mpl::if_<
-                traits::is_view<T>
-              , typename add_lref<typename add_const<T>::type>::type
-              , type
-            >::type
-        call_param;
+        typedef type call_param;
 #endif
 
 #define BOOST_FUSION_VIEW_STORAGE_CTOR(MODIFIER,_)\
-        template<typename OtherT>\
-        view_storage(view_storage<OtherT> MODIFIER storage)\
-          : t(get_init_type(storage.get(), typename traits::is_view<T>::type()))\
+        template<typename OtherSeq>\
+        view_storage(view_storage<OtherSeq, false> MODIFIER storage)\
+          : seq(storage.seq)\
         {}
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_VIEW_STORAGE_CTOR,_)
@@ -67,62 +94,39 @@
 #undef BOOST_FUSION_VIEW_STORAGE_CTOR
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
-        view_storage(call_param t)
-          : t(get_init_type(t, typename traits::is_view<T>::type()))
+        view_storage(call_param seq)
+          : seq(&seq)
         {}
 #else
-        template<typename OtherT>
-        view_storage(OtherT&& t)
-          : t(get_init_type(
-                  std::forward<OtherT>(t),
-                  typename traits::is_view<T>::type()))
+        template<typename OtherSeq>
+        view_storage(OtherSeq&& seq)
+          : seq(&seq)
         {}
 #endif
 
         view_storage&
         operator=(view_storage const& other_storage)
         {
-            t=other_storage.t;
+            seq=other_storage.seq;
             return *this;
         }
 
         template<typename OtherViewStorage>
         view_storage&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherViewStorage) other_storage)
+        operator=(OtherViewStorage const& other_storage)
         {
-            t=BOOST_FUSION_FORWARD(OtherViewStorage,other_storage).t;
+            seq=other_storage.seq;
             return *this;
         }
 
-        typename mpl::if_<
-            traits::is_view<T>
-          , typename add_lref<type>::type
-          , type
-        >::type
-        get() const
-        {
-            return get(typename traits::is_view<T>::type());
-        }
-
-    private:
-        typename add_lref<type>::type
-        get(mpl::true_ /*is_view*/)const
-        {
-            return t;
-        }
-
+        template<typename>
         type
-        get(mpl::false_ /*is_view*/)const
+        get()const
         {
-            return static_cast<type>(*t);
+            return static_cast<type>(*seq);
         }
 
-        typedef typename remove_reference<T>::type non_ref_t;
-        mutable typename mpl::if_<
-            traits::is_view<T>
-          , typename remove_const<non_ref_t>::type
-          , non_ref_t*
-        >::type t;
+        typename remove_reference<Seq>::type* seq;
     };
 }}}
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/begin_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -41,7 +41,7 @@
             static type
             call(Seq seq)
             {
-                return type(fusion::begin(seq.seq.get()),0);
+                return type(fusion::begin(seq.seq.template get<Seq>()),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/end_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -40,7 +40,7 @@
             static type
             call(Seq seq)
             {
-                return type(fusion::end(seq.seq.get()),0);
+                return type(fusion::end(seq.seq.template get<Seq>()),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/begin_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -12,7 +12,6 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
-
 #include <boost/mpl/if.hpp>
 
 namespace boost { namespace fusion { namespace extension
@@ -64,15 +63,15 @@
             static type
             call(Seq seq, mpl::true_)
             {
-                return type(fusion::begin(seq.seq2.get()),0);
+                return type(fusion::begin(seq.seq2.template get<Seq>()),0);
             }
 
             static type
             call(Seq seq, mpl::false_)
             {
                 return type(
-                        fusion::begin(seq.seq1.get())
-                      , fusion::begin(seq.seq2.get()));
+                    fusion::begin(seq.seq1.template get<Seq>()),
+                    fusion::begin(seq.seq2.template get<Seq>()));
             }
 
             static type

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/end_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -41,7 +41,7 @@
             static type
             call(Seq seq)
             {
-                return type(fusion::end(seq.seq2.get()),0);
+                return type(fusion::end(seq.seq2.template get<Seq>()),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -85,16 +85,18 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
         explicit
-        joint_view(typename storage1_type::call_param seq1,
-               typename storage2_type::call_param seq2)
+        joint_view(
+            typename storage1_type::call_param seq1,
+            typename storage2_type::call_param seq2)
           : seq1(seq1)
           , seq2(seq2)
         {}
 #else
         template<typename OtherSeq1, typename OtherSeq2>
         explicit
-        joint_view(BOOST_FUSION_R_ELSE_CLREF(OtherSeq1) seq1,
-                BOOST_FUSION_R_ELSE_CLREF(OtherSeq2) seq2)
+        joint_view(
+            BOOST_FUSION_R_ELSE_CLREF(OtherSeq1) seq1,
+            BOOST_FUSION_R_ELSE_CLREF(OtherSeq2) seq2)
           : seq1(BOOST_FUSION_FORWARD(OtherSeq1,seq1))
           , seq2(BOOST_FUSION_FORWARD(OtherSeq2,seq2))
         {}

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/at_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/at_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -33,7 +33,7 @@
             static type
             call(Seq seq)
             {
-                return fusion::at<index>(seq.seq.get());
+                return fusion::at<index>(seq.seq.template get<Seq>());
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/begin_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -36,7 +36,7 @@
             static type
             call(Seq seq)
             {
-                return type(seq.seq.get(),0);
+                return type(seq.seq.template get<Seq>(),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/end_impl.hpp	(original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -36,7 +36,7 @@
             static type
             call(Seq seq)
             {
-                return type(seq.seq.get(),0);
+                return type(seq.seq.template get<Seq>(),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/begin_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/begin_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,6 +1,6 @@
 /*==============================================================================
     Copyright (c) 2007 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,6 +10,7 @@
 #define BOOST_FUSION_VIEW_REPETITIVE_VIEW_DETAIL_BEGIN_IMPL_HPP
 
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/utility/addressof.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -38,7 +39,9 @@
             static type
             call(Seq seq)
             {
-                return type(seq.seq.get(),fusion::begin(seq.seq.get()));
+                return type(
+                    boost::addressof(seq.seq.template get<Seq>()),
+                    fusion::begin(seq.seq.template get<Seq>()));
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/end_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/end_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,6 +1,6 @@
 /*==============================================================================
     Copyright (c) 2007 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)
@@ -13,17 +13,18 @@
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/advance_c.hpp>
 #include <boost/fusion/support/category_of.hpp>
-
 #include <boost/mpl/modulus.hpp>
 #include <boost/mpl/negate.hpp>
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/or.hpp>
 #include <boost/mpl/not.hpp>
+#include <boost/utility/addressof.hpp>
 
 namespace boost { namespace fusion
 {
     namespace detail
     {
+        //TODO ref
         template<
             typename Seq
           , typename MaxIndex
@@ -65,7 +66,7 @@
             static type
             call(Seq seq)
             {
-                return type(seq,fusion::end(seq));
+                return fusion::end(seq);
             }
         };
     }
@@ -103,7 +104,9 @@
                 static type
                 call(Seq seq)
                 {
-                    return type(seq.seq.get(),gen::call(seq.seq.get()));
+                    return type(
+                        boost::addressof(seq.seq.template get<Seq>()),
+                        gen::call(seq.seq.template get<Seq>()));
                 }
             };
         };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/next_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/next_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/next_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -52,21 +52,21 @@
             type;
 
             static type
-            call_impl(It it, mpl::false_ /*new_iterator*/)
+            call(It it, mpl::false_ /*new_iterator*/)
             {
-                return type(*it.seq,fusion::next(it.it));
+                return type(it.seq,fusion::next(it.it));
             }
 
             static type
-            call_impl(It it, mpl::true_ /*new_iterator*/)
+            call(It it, mpl::true_ /*new_iterator*/)
             {
-                return type(*it.seq,begin(*it.seq));
+                return type(it.seq,begin(*it.seq));
             }
 
             static type
             call(It it)
             {
-                return call_impl(it,new_iterator());
+                return call(it,new_iterator());
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/prior_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/prior_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/prior_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -51,22 +51,25 @@
             type;
 
             static type
-            call_impl(It it, mpl::false_ /*new_iterator*/)
+            call(It it, mpl::false_ /*new_iterator*/)
             {
-                return type(it.seq.get(),fusion::prior(it.it));
+                return type(
+                    it.seq.template get<typename it::seq_type>(),
+                    fusion::prior(it.it));
             }
 
             static type
-            call_impl(It it, mpl::true_ /*new_iterator*/)
+            call(It it, mpl::true_ /*new_iterator*/)
             {
-                return type(it.seq.get(),
-                            fusion::prior(fusion::end(*it.seq)));
+                return type(
+                    it.seq.template get<typename it::seq_type>(),
+                    fusion::prior(fusion::end(*it.seq)));
             }
 
             static type
             call(It it)
             {
-                return call_impl(it,new_iterator());
+                return call(it,new_iterator());
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/repetitive_view_iterator.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/repetitive_view_iterator.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/detail/repetitive_view_iterator.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,6 +1,6 @@
 /*==============================================================================
     Copyright (c) 2007 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)
@@ -12,7 +12,6 @@
 #include <boost/fusion/support/iterator_base.hpp>
 #include <boost/fusion/support/category_of.hpp>
 #include <boost/fusion/support/internal/assert.hpp>
-
 #include <boost/mpl/int.hpp>
 
 namespace boost { namespace fusion
@@ -26,6 +25,7 @@
         typedef SeqRef seq_type;
         typedef It it_type;
         typedef Index index;
+        typedef typename detail::remove_reference<seq_type>::type* seq_ptr_type;
 
         typedef repetitive_view_iterator_tag fusion_tag;
         typedef typename traits::category_of<It>::type category;
@@ -38,8 +38,8 @@
             BOOST_FUSION_TAG_CHECK(OtherIt,repetitive_view_iterator_tag);
         }
 
-        repetitive_view_iterator(SeqRef seq, It const& it)
-          : seq(&seq)
+        repetitive_view_iterator(seq_ptr_type seq, It const& it)
+          : seq(seq)
           , it(it)
         {}
 
@@ -54,7 +54,7 @@
             return *this;
         }
 
-        typename detail::remove_reference<seq_type>::type* seq;
+        seq_ptr_type seq;
         It it;
     };
 }}

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/repetitive_view.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/repetitive_view.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/repetitive_view/repetitive_view.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -109,7 +109,6 @@
         detail::view_storage<Seq> seq;
     };
 
-
     namespace result_of
     {
         template<

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/at_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/at_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -39,7 +39,7 @@
             static type
             call(Seq seq)
             {
-                return fusion::at<real_n>(seq.seq.get());
+                return fusion::at<real_n>(seq.seq.template get<Seq>());
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/begin_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/begin_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -41,7 +41,7 @@
             static type
             call(Seq seq)
             {
-                return type(fusion::end(seq.seq.get()),0);
+                return type(fusion::end(seq.seq.template get<Seq>()),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/end_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -41,7 +41,7 @@
             static type
             call(Seq seq)
             {
-                return type(fusion::begin(seq.seq.get()),0);
+                return type(fusion::begin(seq.seq.template get<Seq>()),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,5 +1,6 @@
 /*==============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2009-2010 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -8,6 +9,8 @@
 #ifndef BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_BEGIN_IMPL_HPP
 #define BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_BEGIN_IMPL_HPP
 
+#include <boost/utility/addressof.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template<typename>
@@ -35,7 +38,7 @@
             static type
             call(Seq seq)
             {
-                return type(seq.val);
+                return type(boost::addressof(seq.val),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/end_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,5 +1,6 @@
 /*==============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2009-2010 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -8,6 +9,8 @@
 #ifndef BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_END_IMPL_HPP
 #define BOOST_FUSION_VIEW_SINGLE_VIEW_DETAIL_END_IMPL_HPP
 
+#include <boost/utility/addressof.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template<typename>
@@ -35,7 +38,7 @@
             static type
             call(Seq seq)
             {
-                return type(seq.val);
+                return type(boost::addressof(seq.val),0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/next_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/next_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/next_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -33,7 +33,7 @@
             static type
             call(It it)
             {
-                return type(*it.val);
+                return type(it.val,0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/prior_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/prior_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/prior_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -32,7 +32,7 @@
             static type
             call(It it)
             {
-                return type(*it.val);
+                return type(it.val,0);
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_iterator.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_iterator.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/detail/single_view_iterator.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,6 +1,6 @@
 /*==============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
-    Copyright (c) 2009 Christopher Schmidt
+    Copyright (c) 2009-2010 Christopher Schmidt
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -23,33 +23,38 @@
         typedef Value value_type;
         typedef ValueRef value_ref_type;
         typedef mpl::bool_<End> end;
+        typedef typename
+            detail::remove_reference<value_ref_type>::type*
+        value_ptr_type;
 
         typedef single_view_iterator_tag fusion_tag;
         typedef random_access_traversal_tag category;
 
-        template<typename OtherIt>
-        single_view_iterator(BOOST_FUSION_R_ELSE_CLREF(OtherIt) it)
-          : val(BOOST_FUSION_FORWARD(OtherIt,it).val)
+        single_view_iterator(value_ptr_type val, int)
+          : val(val)
+        {}
+
+        template<typename OtherValueRef>
+        single_view_iterator(
+            single_view_iterator<Value, OtherValueRef, End> const it)
+          : val(it.val)
         {
-            BOOST_FUSION_TAG_CHECK(OtherIt,single_view_iterator_tag);
+            BOOST_FUSION_MPL_ASSERT((
+                is_convertible<OtherValueRef, value_ref_type>));
         }
 
-        explicit
-        single_view_iterator(value_ref_type val)
-          : val(&val)
-        {}
-
-        template<typename OtherIt>
+        template<typename OtherValueRef>
         single_view_iterator&
-        operator=(BOOST_FUSION_R_ELSE_CLREF(OtherIt) it)
+        operator=(single_view_iterator<Value, OtherValueRef, End> const& it)
         {
-            BOOST_FUSION_TAG_CHECK(OtherIt,single_view_iterator_tag);
+            BOOST_FUSION_MPL_ASSERT((
+                is_convertible<OtherValueRef, value_ref_type>));
 
-            val=BOOST_FUSION_FORWARD(OtherIt,it).val;
+            val=it.val;
             return *this;
         }
 
-        typename detail::remove_reference<value_ref_type>::type* val;
+        value_ptr_type val;
     };
 }}
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/at_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -38,7 +38,7 @@
             static type
             call(Seq seq)
             {
-                return seq.f(fusion::at<N>(seq.seq.get()));
+                return seq.f(fusion::at<N>(seq.seq.template get<Seq>()));
             }
         };
     };
@@ -70,8 +70,8 @@
             static type call(Seq seq)
             {
                 return seq.f(
-                        fusion::at<N>(seq.seq1.get()),
-                        fusion::at<N>(seq.seq2.get()));
+                    fusion::at<N>(seq.seq1.template get<Seq>()),
+                    fusion::at<N>(seq.seq2.template get<Seq>()));
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/begin_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/begin_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/begin_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -53,7 +53,7 @@
             call(Seq seq)
             {
                 return type(
-                    fusion::begin(seq.seq.get()),
+                    fusion::begin(seq.seq.template get<Seq>()),
                     static_cast<transform_type>(seq.f));
             }
         };
@@ -97,8 +97,8 @@
             call(Seq seq)
             {
                 return type(
-                    fusion::begin(seq.seq1.get()),
-                    fusion::begin(seq.seq2.get()),
+                    fusion::begin(seq.seq1.template get<Seq>()),
+                    fusion::begin(seq.seq2.template get<Seq>()),
                     static_cast<transform_type>(seq.f));
             }
         };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/deref_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -24,13 +24,14 @@
         struct apply
         {
             typedef typename detail::remove_reference<It>::type it;
+            typedef typename it::transform_type transform_type;
+            typedef typename detail::get_func_base<transform_type>::type func_base;
+            typedef typename result_of::deref<typename it::it_type>::type deref_res;
 
             typedef typename
                 boost::result_of<
-                    typename detail::get_func_base<
-                        typename it::transform_type
-                    >::type(
-                    typename result_of::deref<typename it::it_type>::type)
+                    func_base(
+                    deref_res)
                 >::type
             type;
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/end_impl.hpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/end_impl.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/detail/end_impl.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -48,7 +48,7 @@
             call(Seq seq)
             {
                 return type(
-                    fusion::end(seq.seq.get()),
+                    fusion::end(seq.seq.template get<Seq>()),
                     static_cast<transform_type>(seq.f));
             }
         };
@@ -92,9 +92,9 @@
             call(Seq seq)
             {
                 return type(
-                        fusion::end(seq.seq1.get())
-                      , fusion::end(seq.seq2.get())
-                      , static_cast<transform_type>(seq.f));
+                    fusion::end(seq.seq1.template get<Seq>()),
+                    fusion::end(seq.seq2.template get<Seq>()),
+                    static_cast<transform_type>(seq.f));
             }
         };
     };

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/all.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/all.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/all.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -40,19 +40,19 @@
     }
 
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST((boost::fusion::all(t, boost::lambda::_1 < 4)));
         BOOST_TEST((boost::fusion::all(t, boost::lambda::_1 > 0)));
     }
 
     {
-        boost::fusion::vector<int, short, double, long> t(1, 2, 3.3, 2);
+        boost::fusion::vector<int, long, double, long> t(1, 2, 3.3, 2);
         BOOST_TEST((boost::fusion::all(t, boost::lambda::_1 < 4)));
         BOOST_TEST((boost::fusion::all(t, boost::lambda::_1 > 0)));
     }
 
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST((!boost::fusion::all(t, boost::lambda::_1 == 1)));
         BOOST_TEST((!boost::fusion::all(t, boost::lambda::_1 < 3)));
     }

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/any.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/any.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/any.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -35,12 +35,12 @@
 main()
 {
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST(boost::fusion::any(t, boost::lambda::_1 == 2));
     }
 
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST(!boost::fusion::any(t, boost::lambda::_1 == 3));
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/count.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/count.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/count.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -16,12 +16,12 @@
 main()
 {
     {
-        boost::fusion::vector<int, short, double> t(1, 1, 1);
+        boost::fusion::vector<int, long, double> t(1, 1, 1);
         BOOST_TEST(boost::fusion::count(t, 1) == 3);
     }
 
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST(boost::fusion::count(t, 3) == 0);
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/count_if.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/count_if.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/count_if.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -17,12 +17,12 @@
 main()
 {
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST(boost::fusion::count_if(t, boost::lambda::_1 == 2) == 1);
     }
 
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST(boost::fusion::count_if(t, boost::lambda::_1 == 3) == 0);
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/none.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/none.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/none.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -34,13 +34,13 @@
 main()
 {
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST((boost::fusion::none(t, boost::lambda::_1 > 4)));
         BOOST_TEST((boost::fusion::none(t, boost::lambda::_1 < 0)));
     }
 
     {
-        boost::fusion::vector<int, short, double> t(1, 2, 3.3);
+        boost::fusion::vector<int, long, double> t(1, 2, 3.3);
         BOOST_TEST((!boost::fusion::none(t, boost::lambda::_1 == 1)));
         BOOST_TEST((!boost::fusion::none(t, boost::lambda::_1 < 3)));
     }

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/replace_if.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/replace_if.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/algorithm/replace_if.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -37,7 +37,7 @@
 
     {
         char const* s = "Ruby";
-        typedef vector<int, short, double, long, char const*, float> vector_type;
+        typedef vector<int, long, double, long, char const*, float> vector_type;
         //TODO
         vector_type t1(1, 2, 3.3, 4, s, 5.5f);
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_class.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_class.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_class.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -99,14 +99,14 @@
     {
         // conversion from ns::point to vector
         ns::point p(5, 3);
-        boost::fusion::vector<int, short> v(p);
+        boost::fusion::vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from ns::point to list
         ns::point p(5, 3);
-        boost::fusion::list<int, short> l(p);
+        boost::fusion::list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_class_named.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_class_named.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_class_named.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -29,7 +29,7 @@
     class point
     {
     public:
-    
+
         point() : x(0), y(0) {}
         point(int x, int y) : x(x), y(y) {}
             
@@ -103,7 +103,7 @@
         // conversion from adapted::point to vector
         ns::point basep(5, 3);
         adapted::point p(basep);
-        boost::fusion::vector<int, short> v(p);
+        boost::fusion::vector<int, long> v(p);
         v = p;
     }
 
@@ -111,7 +111,7 @@
         // conversion from adated::point to list
         ns::point basep(5, 3);
         adapted::point p(basep);
-        boost::fusion::list<int, short> l(p);
+        boost::fusion::list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_struct.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_struct.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_struct.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -100,14 +100,14 @@
     {
         // conversion from ns::point to vector
         ns::point p = {5, 3};
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from ns::point to list
         ns::point p = {5, 3};
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_struct_named.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_struct_named.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_struct_named.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -89,7 +89,7 @@
         // conversion from adapted::point to vector
         ns::point basep = {5, 3};
         adapted::point p(basep);
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
@@ -97,7 +97,7 @@
         // conversion from adapted::point to list
         ns::point basep = {5, 3};
         adapted::point p(basep);
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_tpl_class.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_tpl_class.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_tpl_class.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -103,14 +103,14 @@
     {
         // conversion from point to vector
         point p(5, 3);
-        boost::fusion::vector<int, short> v(p);
+        boost::fusion::vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from point to list
         point p(5, 3);
-        boost::fusion::list<int, short> l(p);
+        boost::fusion::list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_tpl_struct.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_tpl_struct.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_assoc_tpl_struct.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -103,14 +103,14 @@
     {
         // conversion from point to vector
         point p = {5, 3};
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from point to list
         point p = {5, 3};
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_class.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_class.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_class.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -51,6 +51,24 @@
         int x;
         int y;
     };
+
+    class point_with_private_members
+    {
+        friend class boost::fusion::extension::access;
+
+    public:
+        point_with_private_members() : x(0), y(0) {}
+        point_with_private_members(int x, int y) : x(x), y(y) {}
+
+    private:
+        int get_x() const { return x; }
+        int get_y() const { return y; }
+        void set_x(int x_) { x = x_; }
+        void set_y(int y_) { y = y_; }
+
+        int x;
+        int y;
+    };
 }
 
 BOOST_FUSION_ADAPT_CLASS(
@@ -59,6 +77,12 @@
     (int, int, obj.get_y(), obj.set_y(val))
 )
 
+BOOST_FUSION_ADAPT_CLASS(
+    ns::point_with_private_members,
+    (int, int, obj.get_x(), obj.set_x(val))
+    (int, int, obj.get_y(), obj.set_y(val))
+)
+
 int
 main()
 {
@@ -107,14 +131,14 @@
     {
         // conversion from ns::point to vector
         ns::point p(5, 3);
-        boost::fusion::vector<int, short> v(p);
+        boost::fusion::vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from ns::point to list
         ns::point p(5, 3);
-        boost::fusion::list<int, short> l(p);
+        boost::fusion::list<int, long> l(p);
         l = p;
     }
 
@@ -125,6 +149,26 @@
           , boost::mpl::front<ns::point>::type>));
     }
 
+    {
+        BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point_with_private_members>));
+        ns::point_with_private_members p(123, 456);
+
+        std::cout << at_c<0>(p) << std::endl;
+        std::cout << at_c<1>(p) << std::endl;
+        std::cout << p << std::endl;
+        BOOST_TEST(p == make_vector(123, 456));
+
+        at_c<0>(p) = 6;
+        at_c<1>(p) = 9;
+        BOOST_TEST(p == make_vector(6, 9));
+
+        BOOST_STATIC_ASSERT(result_of::size<ns::point_with_private_members>::value \
== 2); +        BOOST_STATIC_ASSERT(!result_of::empty<ns::point_with_private_members>::value);
 +
+        BOOST_TEST(front(p) == 6);
+        BOOST_TEST(back(p) == 9);
+    }
+
     return boost::report_errors();
 }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_class_named.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_class_named.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_class_named.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -112,7 +112,7 @@
         ns::point basep(5, 3);
         adapted::point p(basep);
 
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
@@ -121,7 +121,7 @@
         ns::point basep(5, 3);
         adapted::point p(basep);
 
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_struct.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_struct.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_struct.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -35,6 +35,19 @@
         int x;
         int y;
     };
+
+    struct point_with_private_attributes
+    {
+        friend class boost::fusion::extension::access;
+
+    private:
+        int x;
+        int y;
+
+    public:
+        point_with_private_attributes(int x, int y):x(x),y(y)
+        {}
+    };
 }
 
 BOOST_FUSION_ADAPT_STRUCT(
@@ -43,6 +56,12 @@
     (int, y)
 )
 
+BOOST_FUSION_ADAPT_STRUCT(
+    ns::point_with_private_attributes,
+    (int, x)
+    (int, y)
+)
+
 struct s { int m; };
 BOOST_FUSION_ADAPT_STRUCT(s, (int, m))
 
@@ -93,14 +112,14 @@
     {
         // conversion from ns::point to vector
         ns::point p = {5, 3};
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from ns::point to list
         ns::point p = {5, 3};
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 
@@ -113,6 +132,15 @@
         BOOST_MPL_ASSERT((boost::is_same<result_of::next<b>::type, e>));
     }
 
+    {
+        ns::point_with_private_attributes p(123, 456);
+
+        std::cout << at_c<0>(p) << std::endl;
+        std::cout << at_c<1>(p) << std::endl;
+        std::cout << p << std::endl;
+        BOOST_TEST(p == make_vector(123, 456));
+    }
+
     return boost::report_errors();
 }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_struct_named.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_struct_named.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_struct_named.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -103,7 +103,7 @@
         // conversion from adapted::point to vector
         ns::point basep = {5, 3};
         adapted::point p(basep);
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
@@ -111,7 +111,7 @@
         // conversion from adapted::point to list
         ns::point basep = {5, 3};
         adapted::point p(basep);
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_tpl_class.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_tpl_class.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_tpl_class.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -111,14 +111,14 @@
     {
         // conversion from point to vector
         point p(5, 3);
-        boost::fusion::vector<int, short> v(p);
+        boost::fusion::vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from point to list
         point p(5, 3);
-        boost::fusion::list<int, short> l(p);
+        boost::fusion::list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_tpl_struct.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_tpl_struct.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/adapt_tpl_struct.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -98,14 +98,14 @@
     {
         // conversion from point to vector
         point p = {5, 3};
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from point to list
         point p = {5, 3};
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/comparison.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/comparison.hpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/comparison.hpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -36,7 +36,7 @@
     using namespace boost::fusion;
 
     FUSION_SEQUENCE<int, float> v1(4, 3.3f);
-    FUSION_SEQUENCE<short, float> v2(5, 3.3f);
+    FUSION_SEQUENCE<long, float> v2(5, 3.3f);
     FUSION_SEQUENCE<long, double> v3(5, 4.4);
     BOOST_TEST(v1 < v2);
     BOOST_TEST(v1 <= v2);

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_assoc_struct.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_assoc_struct.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_assoc_struct.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -86,14 +86,14 @@
     {
         // conversion from ns::point to vector
         ns::point p(5, 3);
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from ns::point to list
         ns::point p(5, 3);
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_assoc_tpl_struct.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_assoc_tpl_struct.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_assoc_tpl_struct.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -90,14 +90,14 @@
     {
         // conversion from point to vector
         point p(5, 3);
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from point to list
         point p(5, 3);
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_struct.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_struct.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_struct.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -83,14 +83,14 @@
     {
         // conversion from ns::point to vector
         ns::point p(5, 3);
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from ns::point to list
         ns::point p(5, 3);
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_tpl_struct.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_tpl_struct.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/define_tpl_struct.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -86,14 +86,14 @@
     {
         // conversion from point to vector
         point p(5, 3);
-        vector<int, short> v(p);
+        vector<int, long> v(p);
         v = p;
     }
 
     {
         // conversion from point to list
         point p(5, 3);
-        list<int, short> l(p);
+        list<int, long> l(p);
         l = p;
     }
 

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/tr1_tuple_auto_conv.cpp
 ==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/tr1_tuple_auto_conv.cpp	(original)
                
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/tr1_tuple_auto_conv.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -48,7 +48,7 @@
 } // namespace Core
 
 
-int main(int, char*[])
+int main()
 {
     //TODO
     //std::tr1::tuple<int, int, int, int> test = Core::Demo();

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/vector_n.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/vector_n.cpp	(original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/suite1/sequence/vector_n.cpp	2010-07-30 \
17:48:11 EDT (Fri, 30 Jul 2010) @@ -1,4 +1,4 @@
-/*==============================================================================
+/*=============================================================================
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying 
@@ -58,7 +58,7 @@
     }
 
     { // testing const vector
-        vector1<short> const vec(999);
+        vector1<short> const vec((short)999);
         BOOST_TEST(at_c<0>(vec) == 999);
 
 #ifdef FUSION_TEST_COMPILE_FAIL
@@ -94,7 +94,7 @@
 
     {
         vector2<int, int> t1(123, 456);
-        vector2<double, float> t2(t1);
+        vector2<double, double> t2(t1);
         (void)t2;
     }
 
@@ -135,8 +135,7 @@
 
     {
         typedef vector7<bool, char, short, int, long, float, double> type;
-        //TODO
-        type vec(false, 'x', 3, 4, 5, 6.0f, 7.0);
+        type vec(false, 'x', (short)3, 4, 5, 6.0f, 7.0);
 
         BOOST_TEST(at_c<0>(vec) == false);
         BOOST_TEST(at_c<1>(vec) == 'x');



_______________________________________________
Boost-commit mailing list
Boost-commit@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-commit


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic