Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r55557 - in sandbox/SOC/2009/fusion: . boost/fusion boost/fusion/adapted boost/fusion/adapted/detail/array boost/fusion/adapted/detail/boost_tuple boost/fusion/adapted/detail/mpl boost/fusion/adapted/detail/struct boost/fusion/adapted/struct boost/fusion/algorithm boost/fusion/algorithm/iteration boost/fusion/algorithm/query boost/fusion/algorithm/transformation boost/fusion/algorithm/transformation/detail boost/fusion/algorithm/transformation/detail/filter_key_view boost/fusion/algorithm/transformation/detail/pp boost/fusion/algorithm/transformation/detail/variadic_templates boost/fusion/container boost/fusion/container/list boost/fusion/container/list/detail/cons boost/fusion/container/list/detail/list boost/fusion/container/map boost/fusion/container/map/detail boost/fusion/container/set boost/fusion/container/set/detail boost/fusion/container/vector boost/fusion/container/vector/detail boost/fusion/container/vector/detail/pp boost/fusion/container/vector/detail/variadic_templates boost/fusion/functional boost/fusion/iterator boost/fusion/mpl boost/fusion/sequence boost/fusion/sequence/comparison boost/fusion/sequence/comparison/detail boost/fusion/sequence/intrinsic boost/fusion/sequence/io boost/fusion/support boost/fusion/support/detail boost/fusion/support/variadic_templates boost/fusion/tuple boost/fusion/view/detail boost/fusion/view/filter_view boost/fusion/view/iterator_range boost/fusion/view/joint_view boost/fusion/view/joint_view/detail boost/fusion/view/reverse_view boost/fusion/view/reverse_view/detail boost/fusion/view/transform_view boost/fusion/view/zip_view boost/fusion/view/zip_view/detail libs/fusion/example/test libs/fusion/test/sequence
From: mr.chr.schmidt_at_[hidden]
Date: 2009-08-12 17:36:42


Author: cschmidt
Date: 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
New Revision: 55557
URL: http://svn.boost.org/trac/boost/changeset/55557

Log:
asserts & bugfixes
Added:
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/deref_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_of_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/filter_key_view_fwd.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/has_key_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/value_at_key_impl.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/is_in_seq.hpp (contents, props changed)
   sandbox/SOC/2009/fusion/boost/fusion/support/detail/workaround.hpp (contents, props changed)
Removed:
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp
Text files modified:
   sandbox/SOC/2009/fusion/boost/fusion/adapted.hpp | 7 +
   sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_array.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp | 3
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp | 11 +++
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp | 4
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp | 35 ++++---------
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp | 33 ++++++++---
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/at_impl.hpp | 5 -
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/extension.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_assoc_struct.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_struct.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp | 4 +
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp | 14 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query.hpp | 5 +
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp | 14 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp | 14 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp | 14 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp | 14 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp | 21 +++----
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp | 20 ++----
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_key.hpp | 21 +++----
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp | 13 ++++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation.hpp | 4
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp | 9 +-
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp | 15 +++++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp | 8 +++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp | 18 ++++--
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp | 62 +++++++++++++++++++---
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp | 18 +++---
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp | 9 +++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp | 11 +++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp | 8 +++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp | 31 +++++++----
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp | 11 +++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp | 11 +++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp | 5 +
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp | 5 +
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp | 20 ++++---
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp | 14 +++-
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp | 5 +
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp | 4 +
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp | 8 ++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp | 10 +++
   sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp | 6 -
   sandbox/SOC/2009/fusion/boost/fusion/container.hpp | 4
   sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/container/list.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/container/list/cons.hpp | 16 +++++
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp | 4 +
   sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp | 3
   sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp | 3
   sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/begin_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/end_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/begin_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/end_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/begin_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/end_impl.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector.hpp | 14 ++++
   sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/functional/adapter.hpp | 7 +-
   sandbox/SOC/2009/fusion/boost/fusion/functional/generation.hpp | 4
   sandbox/SOC/2009/fusion/boost/fusion/functional/invocation.hpp | 5 +
   sandbox/SOC/2009/fusion/boost/fusion/iterator.hpp | 8 ++
   sandbox/SOC/2009/fusion/boost/fusion/iterator/advance.hpp | 25 ++++++---
   sandbox/SOC/2009/fusion/boost/fusion/iterator/basic_iterator.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/iterator/deref.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/iterator/deref_data.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp | 17 ++----
   sandbox/SOC/2009/fusion/boost/fusion/iterator/equal_to.hpp | 15 +++-
   sandbox/SOC/2009/fusion/boost/fusion/iterator/key_of.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/iterator/next.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/iterator/prior.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of_data.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/mpl.hpp | 7 +
   sandbox/SOC/2009/fusion/boost/fusion/mpl/fusion_iterator.hpp | 3
   sandbox/SOC/2009/fusion/boost/fusion/sequence.hpp | 4
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/enable_comparison.hpp | 15 +---
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/equal_to.hpp | 12 ++++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater.hpp | 15 ++++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater_equal.hpp | 15 ++++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less.hpp | 11 ++++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less_equal.hpp | 15 ++++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/not_equal_to.hpp | 15 ++++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp | 5 +
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic.hpp | 7 +
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp | 55 ++++++++++++++------
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp | 10 +++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp | 16 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/empty.hpp | 12 +++-
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp | 5 +
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp | 14 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/has_key.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/size.hpp | 6 +
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp | 12 ++++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp | 39 +++++++++++++-
   sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp | 14 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/sequence/io/in.hpp | 12 +++
   sandbox/SOC/2009/fusion/boost/fusion/sequence/io/out.hpp | 14 ++++-
   sandbox/SOC/2009/fusion/boost/fusion/support.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/support/assert.hpp | 105 ++++++++++++++++++++++++++++++++-------
   sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp | 49 +++++++++++++++++-
   sandbox/SOC/2009/fusion/boost/fusion/support/deduce_sequence.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp | 28 ++++++++-
   sandbox/SOC/2009/fusion/boost/fusion/support/is_sequence.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp | 2
   sandbox/SOC/2009/fusion/boost/fusion/support/tag_of.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_quote.hpp | 18 +++---
   sandbox/SOC/2009/fusion/boost/fusion/tuple.hpp | 4
   sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp | 14 +----
   sandbox/SOC/2009/fusion/boost/fusion/view.hpp | 3
   sandbox/SOC/2009/fusion/boost/fusion/view/detail/strictest_traversal.hpp | 39 +++++---------
   sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp | 4 +
   sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp | 14 ++--
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/joint_view_iterator.hpp | 1
   sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/joint_view.hpp | 6 ++
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp | 5 -
   sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp | 5 +
   sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp | 10 +++
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/at_impl.hpp | 5 -
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp | 6 -
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/distance_impl.hpp | 32 +++++------
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp | 6 -
   sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp | 59 ++++++++++++++-------
   sandbox/SOC/2009/fusion/build.bat | 2
   sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp | 47 +++++++++++++++++
   sandbox/SOC/2009/fusion/libs/fusion/test/sequence/list_iterator.cpp | 2
   sandbox/SOC/2009/fusion/libs/fusion/test/sequence/zip_view2.cpp | 3 -
   sandbox/SOC/2009/fusion/project-root.jam | 5 +
   147 files changed, 1132 insertions(+), 460 deletions(-)

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,13 @@
 #ifndef BOOST_FUSION_ADAPTED_HPP
 #define BOOST_FUSION_ADAPTED_HPP
 
-#include <boost/fusion/adapted/boost_tuple.hpp>
-#include <boost/fusion/adapted/std_pair.hpp>
 #include <boost/fusion/adapted/array.hpp>
+#include <boost/fusion/adapted/boost_array.hpp>
+#include <boost/fusion/adapted/boost_tuple.hpp>
 #include <boost/fusion/adapted/mpl.hpp>
+//TODO!!!
+//#include <boost/fusion/adapted/std_array.hpp>
+#include <boost/fusion/adapted/std_pair.hpp>
 #include <boost/fusion/adapted/struct.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_array.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_array.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_array.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,7 +6,6 @@
 #ifndef BOOST_FUSION_ADAPTED_BOOST_ARRAY_HPP
 #define BOOST_FUSION_ADAPTED_BOOST_ARRAY_HPP
  
-#include <boost/fusion/iterator/basic_iterator.hpp>
 #include <boost/fusion/support/ref.hpp>
 
 #define BOOST_FUSION_ADAPTED_ARRAY_TYPE class

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/boost_tuple.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -21,8 +21,9 @@
 #include <boost/fusion/adapted/detail/boost_tuple/size_impl.hpp>
 #include <boost/fusion/adapted/detail/boost_tuple/at_impl.hpp>
 #include <boost/fusion/adapted/detail/boost_tuple/value_at_impl.hpp>
-#include <boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp>
 #include <boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp>
 #include <boost/fusion/adapted/detail/boost_tuple/end_impl.hpp>
+#include <boost/fusion/adapted/detail/boost_tuple/deref_impl.hpp>
+#include <boost/fusion/adapted/detail/boost_tuple/value_of_impl.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
 #ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_BEGIN_IMPL_HPP
 #define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_BEGIN_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template<typename Tag>

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/array/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
 #ifndef BOOST_FUSION_ADAPTED_DETAIL_ARRAY_END_IMPL_HPP
 #define BOOST_FUSION_ADAPTED_DETAIL_ARRAY_END_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
 #ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BEGIN_IMPL_HPP
 #define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BEGIN_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template<typename Tag>
@@ -19,7 +21,14 @@
         template <typename SeqRef>
         struct apply
         {
- typedef boost_tuple_iterator<SeqRef> type;
+ typedef
+ basic_iterator<
+ boost_tuple_iterator_tag
+ , random_access_traversal_tag
+ , SeqRef
+ , 0
+ >
+ type;
 
             static type
             call(SeqRef seq)

Deleted: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/boost_tuple_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
+++ (empty file)
@@ -1,104 +0,0 @@
-/*=============================================================================
- Copyright (c) 2001-2006 Joel de Guzman
-
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BOOST_TUPLE_ITERATOR_HPP
-#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_BOOST_TUPLE_ITERATOR_HPP
-
-#include <boost/fusion/iterator/iterator_facade.hpp>
-
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost { namespace fusion
-{
- struct forward_traversal_tag;
-
- template <typename ConsRef>
- struct boost_tuple_iterator
- : iterator_facade<boost_tuple_iterator<ConsRef>, forward_traversal_tag>
- {
- typedef ConsRef cons_type;
-
- template <typename ItRef>
- struct value_of
- {
- typedef typename
- detail::remove_reference<ConsRef>::type::head_type
- type;
- };
-
- template <typename ItRef>
- struct deref
- {
- typedef typename
- detail::forward_as<
- ConsRef
- , typename detail::remove_reference<
- ConsRef
- >::type::head_type
- >::type
- type;
-
- static type
- call(ItRef it)
- {
- return it.cons->get_head();
- }
- };
-
- template <typename ItRef>
- struct next
- {
- typedef
- boost_tuple_iterator<
- typename detail::forward_as<
- ConsRef
- , typename detail::remove_reference<
- ConsRef
- >::type::tail_type
- >::type
- >
- type;
-
- static type
- call(ItRef it)
- {
- return type(it.cons->get_tail(),0);
- }
- };
-
- template <typename It1Ref, typename It2Ref>
- struct equal_to
- : is_same<
- typename detail::identity<ConsRef>::type
- , typename detail::identity<
- typename detail::remove_reference<It2Ref>::type::cons_type
- >::type
- >
- {};
-
- template<typename OtherIt>
- boost_tuple_iterator(OtherIt const& it)
- : cons(it.cons)
- {}
-
- boost_tuple_iterator(ConsRef cons, int)
- : cons(&cons)
- {}
-
- template<typename OtherIt>
- boost_tuple_iterator&
- operator=(OtherIt const& it)
- {
- cons=it.cons;
- return *this;
- }
-
- typename detail::remove_reference<ConsRef>::type* cons;
- };
-}}
-
-#endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/category_of_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,7 +10,7 @@
 
 namespace boost { namespace fusion
 {
- struct forward_traversal_tag;
+ struct random_access_traversal_tag;
 
     namespace extension
     {
@@ -23,7 +23,7 @@
             template<typename SeqRef>
             struct apply
             {
- typedef forward_traversal_tag type;
+ typedef random_access_traversal_tag type;
             };
         };
     }

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/deref_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/deref_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,43 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_DEREF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_DEREF_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<boost_tuple_iterator_tag>
+ {
+ template <typename ItRef>
+ struct apply
+ {
+ typedef typename detail::remove_reference<ItRef>::type it;
+
+ typedef typename
+ detail::forward_as<
+ typename it::seq_type
+ , typename tuples::element<
+ it::index::value
+ , typename detail::remove_reference<
+ typename it::seq_type
+ >::type
+ >::type
+ >::type
+ type;
+
+ static type
+ call(ItRef it_)
+ {
+ return get<it::index::value>(*it_.seq);
+ }
+ };
+ };
+}}}
+
+#endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,8 +8,7 @@
 #ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_END_IMPL_HPP
 #define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_END_IMPL_HPP
 
-#include <boost/mpl/bool.hpp>
-#include <boost/type_traits/is_convertible.hpp>
+#include <boost/fusion/iterator/basic_iterator.hpp>
 
 namespace boost { namespace fusion { namespace extension
 {
@@ -19,37 +18,25 @@
     template <>
     struct end_impl<boost_tuple_tag>
     {
- template <typename>
+ template <typename SeqRef>
         struct apply
         {
             typedef
- boost_tuple_iterator<tuples::null_type const volatile&>
+ basic_iterator<
+ boost_tuple_iterator_tag
+ , random_access_traversal_tag
+ , SeqRef
+ , tuples::length<
+ typename detail::identity<SeqRef>::type
+ >::value
+ >
             type;
 
- template<typename Seq>
             static type
- call(Seq const& seq, mpl::true_)
+ call(SeqRef seq)
             {
                 return type(seq,0);
             }
-
- template<typename Seq>
- static type
- call(Seq const& seq, mpl::false_)
- {
- return call(seq.get_tail());
- }
-
- template<typename Seq>
- static type
- call(Seq const& seq)
- {
- return call(seq,
- typename is_convertible<
- Seq*
- , tuples::null_type const volatile*
- >::type());
- }
         };
     };
 }}}

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/tag_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,6 +13,7 @@
 namespace boost { namespace fusion
 {
     struct boost_tuple_tag;
+ struct boost_tuple_iterator_tag;
 
     namespace traits
     {

Added: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_of_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/boost_tuple/value_of_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,34 @@
+// Copyright Christopher Schmidt 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_VALUE_OF_IMPL_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_BOOST_TUPLE_VALUE_OF_IMPL_HPP
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct value_of_impl;
+
+ template <>
+ struct value_of_impl<boost_tuple_iterator_tag>
+ {
+ template <typename ItRef>
+ struct apply
+ {
+ typedef typename detail::remove_reference<ItRef>::type it;
+
+ typedef typename
+ tuples::element<
+ it::index::value
+ , typename detail::remove_reference<
+ typename it::seq_type
+ >::type
+ >::type
+ type;
+ };
+ };
+}}}
+
+#endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/category_of_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,13 +11,8 @@
 
 #include <boost/mpl/begin.hpp>
 #include <boost/mpl/is_sequence.hpp>
-
-namespace boost { namespace mpl
-{
- struct forward_iterator_tag;
- struct bidirectional_iterator_tag;
- struct random_access_iterator_tag;
-}}
+#include <boost/mpl/iterator_category.hpp>
+#include <boost/mpl/iterator_tags.hpp>
 
 namespace boost { namespace fusion
 {
@@ -62,9 +57,27 @@
             {
                 typedef typename
                     detail::mpl_iterator_category<
- typename mpl::begin<
- typename detail::identity<SeqRef>::type
- >::type::category
+ typename mpl::iterator_category<
+ typename mpl::begin<
+ typename detail::identity<SeqRef>::type
+ >::type
+ >::type
+ >::type
+ type;
+ };
+ };
+
+ template<>
+ struct category_of_impl<mpl_iterator_tag>
+ {
+ template<typename ItRef>
+ struct apply
+ {
+ typedef typename
+ detail::mpl_iterator_category<
+ typename mpl::iterator_category<
+ typename detail::identity<ItRef>::type
+ >::type
>::type
                 type;
             };

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/mpl/mpl_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,7 +11,7 @@
 #include <boost/fusion/iterator/iterator_facade.hpp>
 #include <boost/fusion/support/category_of.hpp>
 
-//TODO assoc iterator!
+//TODO doc no assoc iterator!
 
 namespace boost { namespace fusion
 {

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,8 +9,6 @@
 #ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_AT_IMPL_HPP
 #define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_AT_IMPL_HPP
 
-#include <boost/fusion/support/assert.hpp>
-
 #include <boost/mpl/int.hpp>
 
 namespace boost { namespace fusion { namespace extension
@@ -24,9 +22,6 @@
         template <typename SeqRef, typename N>
         struct apply
         {
- //BOOST_FUSION_INDEX_CHECK(n_value,
- // struct_size<Sequence>::value);
-
             typedef typename
                 detail::forward_as<
                     SeqRef

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
 #ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_BEGIN_IMPL_HPP
 #define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_BEGIN_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template<typename Tag>

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/detail/struct/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
 #ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_END_IMPL_HPP
 #define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_END_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -19,7 +19,7 @@
     struct assoc_struct_iterator_tag;
 
     struct assoc_struct_category
- : forward_traversal_tag, associative_sequence_tag
+ : bidirectional_traversal_tag, associative_sequence_tag
     {};
 
     namespace extension

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,4 +11,5 @@
 
 #include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
 #include <boost/fusion/adapted/struct/adapt_struct.hpp>
+
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_assoc_struct.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_assoc_struct.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_assoc_struct.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -7,7 +7,6 @@
 #define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_HPP
 
 #include <boost/fusion/support/ref.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
 
 #include <boost/fusion/adapted/detail/struct/extension.hpp>
 #include <boost/fusion/adapted/detail/struct/adapt_base.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_struct.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_struct.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/adapted/struct/adapt_struct.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -7,7 +7,6 @@
 #define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
 
 #include <boost/fusion/support/ref.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
 
 #include <boost/fusion/adapted/detail/struct/extension.hpp>
 #include <boost/fusion/adapted/detail/struct/adapt_base.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/accumulate.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
 
 #include <boost/fusion/algorithm/iteration/fold.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -18,7 +19,10 @@
         template <typename Seq, typename State, typename F>
         struct accumulate
           : fold<Seq, State, F>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
     }
 
     template <typename Seq, typename State, typename F>

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/fold.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
 
 #include <boost/fusion/sequence/intrinsic/size.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/algorithm/iteration/detail/fold.hpp>
 
@@ -23,6 +24,9 @@
         template <typename Seq, typename State, typename F>
         struct fold
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef
                 detail::fold_impl<
                     size<Seq>::value

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/iteration/for_each.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
 
 #include <boost/fusion/sequence/intrinsic/size.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/algorithm/iteration/detail/for_each.hpp>
 
@@ -20,15 +21,22 @@
 
     namespace result_of
     {
- template <typename, typename>
+ template <typename Seq, typename>
         struct for_each
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef void type;
         };
     }
 
     template <typename Seq, typename F>
- inline void
+ inline typename
+ result_of::for_each<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
     for_each(BOOST_FUSION_R_ELSE_CLREF(Seq) seq,
              BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
@@ -40,7 +48,7 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Seq, typename F>
- inline void
+ inline typename result_of::for_each<Seq&,F const&>::type
     for_each(Seq& seq,F const& f)
     {
         detail::for_each_unrolled<result_of::size<Seq&>::value>::call(

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,10 +10,11 @@
 
 #include <boost/fusion/algorithm/query/all.hpp>
 #include <boost/fusion/algorithm/query/any.hpp>
-#include <boost/fusion/algorithm/query/count.hpp>
 #include <boost/fusion/algorithm/query/count_if.hpp>
-#include <boost/fusion/algorithm/query/find.hpp>
+#include <boost/fusion/algorithm/query/count.hpp>
 #include <boost/fusion/algorithm/query/find_if.hpp>
+#include <boost/fusion/algorithm/query/find_key.hpp>
+#include <boost/fusion/algorithm/query/find.hpp>
 #include <boost/fusion/algorithm/query/none.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/all.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,6 +12,7 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/size.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/algorithm/query/detail/all.hpp>
 
@@ -19,15 +20,22 @@
 {
     namespace result_of
     {
- template <typename, typename>
+ template <typename Seq, typename>
         struct all
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef bool type;
         };
     }
 
     template <typename Seq, typename F>
- inline bool
+ inline typename
+ result_of::all<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
     all(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return
@@ -40,7 +48,7 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Seq, typename F>
- inline bool
+ inline typename result_of::all<Seq&, F const&>::type
     all(Seq& seq, F const& f)
     {
         return

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/any.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,6 +12,7 @@
 
 #include <boost/fusion/algorithm/query/all.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -39,15 +40,22 @@
 
     namespace result_of
     {
- template <typename Seq, typename F>
+ template <typename Seq, typename>
         struct any
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef bool type;
         };
     }
 
     template <typename Seq, typename F>
- inline bool
+ inline typename
+ result_of::any<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
     any(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return !fusion::all(
@@ -57,7 +65,7 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Seq, typename F>
- inline bool
+ inline typename result_of::any<Seq&,F const&>::type
     any(Seq& seq, F const& f)
     {
         return !fusion::all(seq,detail::any_helper<F const&>(f));

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
 
 #include <boost/fusion/algorithm/query/count_if.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/algorithm/query/detail/count.hpp>
 
@@ -18,15 +19,22 @@
 {
     namespace result_of
     {
- template <typename Seq, typename F>
+ template <typename Seq, typename>
         struct count
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef int type;
         };
     }
 
     template <typename Seq, typename T>
- inline int
+ inline typename
+ result_of::count<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(T)
+ >::type
     count(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(T) x)
     {
         return fusion::count_if(
@@ -36,7 +44,7 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Seq, typename T>
- inline int
+ inline typename result_of::count<Seq&, T const&>::type
     count(Seq& seq, T const& x)
     {
         return fusion::count_if(seq,detail::count_helper<T const&>(x));

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
 
 #include <boost/fusion/algorithm/iteration/fold.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -38,15 +39,22 @@
 
     namespace result_of
     {
- template <typename Seq, typename F>
+ template <typename Seq, typename>
         struct count_if
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef int type;
         };
     }
 
     template <typename Seq, typename F>
- inline int
+ inline typename
+ result_of::count_if<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
     count_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return fold(BOOST_FUSION_FORWARD(Seq,seq),
@@ -56,7 +64,7 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Seq, typename F>
- inline int
+ inline typename result_of::count_if<Seq&,F const&>::type
     count_if(Seq& seq, F const& f)
     {
         return fold(seq,

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,13 +11,12 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/value_of.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
 
 #include <boost/mpl/placeholders.hpp>
 #include <boost/type_traits/is_same.hpp>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
-#endif
 
 #include <boost/fusion/algorithm/query/detail/find_if.hpp>
 
@@ -28,6 +27,9 @@
         template <typename Seq, typename T>
         struct find
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef
                 detail::static_seq_find_if<
                     typename begin<Seq>::type
@@ -54,15 +56,8 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename T, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<
- is_const<Seq>
- , result_of::find<Seq&, T>
- >::type const
-#else
- inline typename result_of::find<Seq&, T>::type const
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::find<,Seq,&, T>) const
     find(Seq& seq)
     {
         return result_of::find<Seq&, T>::filter::call(seq);

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,15 +12,13 @@
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/value_of.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
 
 #include <boost/mpl/quote.hpp>
 #include <boost/mpl/lambda.hpp>
 #include <boost/mpl/bind.hpp>
 #include <boost/mpl/placeholders.hpp>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
-#endif
 
 #include <boost/fusion/algorithm/query/detail/find_if.hpp>
 
@@ -31,6 +29,9 @@
         template <typename Seq, typename Pred>
         struct find_if
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef
                 detail::static_find_if<
                     typename begin<Seq>::type
@@ -59,15 +60,8 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Pred, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<
- is_const<Seq>
- , result_of::find_if<Seq&, Pred>
- >::type const
-#else
- inline typename result_of::find_if<Seq&, Pred>::type const
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::find_if<,Seq,&,Pred>)
     find_if(Seq& seq)
     {
         return result_of::find_if<Seq&, Pred>::gen::call(fusion::begin(seq));

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/find_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,11 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/key_of.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
 
 #include <boost/type_traits/is_same.hpp>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
-#endif
 
 #include <boost/fusion/algorithm/query/detail/find_if.hpp>
 
@@ -27,6 +26,9 @@
         template <typename Seq, typename T>
         struct find_key
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef
                 detail::static_seq_find_if<
                     typename begin<Seq>::type
@@ -53,15 +55,8 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename T, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<
- is_const<Seq>
- , result_of::find_key<Seq&, T>
- >::type const
-#else
- inline typename result_of::find_key<Seq&, T>::type const
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::find_key<,Seq,&, T>) const
     find_key(Seq& seq)
     {
         return result_of::find_key<Seq&, T>::filter::call(seq);

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/none.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,8 @@
 #define BOOST_FUSION_ALGORITHM_QUERY_NONE_HPP
 
 #include <boost/fusion/algorithm/query/any.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
 
 namespace boost { namespace fusion
 {
@@ -18,12 +20,19 @@
         template <typename Seq, typename F>
         struct none
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef bool type;
         };
     }
 
     template <typename Seq, typename F>
- inline bool
+ inline typename
+ result_of::none<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+ , BOOST_FUSION_R_ELSE_CLREF(F)
+ >::type
     none(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_R_ELSE_CLREF(F) f)
     {
         return !fusion::any(
@@ -33,7 +42,7 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Seq, typename F>
- inline bool
+ inline typename result_of::none<Seq&, F const&>::type
     none(Seq& seq, F const& f)
     {
         return !fusion::any(seq,f);

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,10 @@
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_HPP
 
 #include <boost/fusion/algorithm/transformation/clear.hpp>
-#include <boost/fusion/algorithm/transformation/erase.hpp>
 #include <boost/fusion/algorithm/transformation/erase_key.hpp>
-#include <boost/fusion/algorithm/transformation/filter.hpp>
+#include <boost/fusion/algorithm/transformation/erase.hpp>
 #include <boost/fusion/algorithm/transformation/filter_if.hpp>
+#include <boost/fusion/algorithm/transformation/filter.hpp>
 #include <boost/fusion/algorithm/transformation/insert_range.hpp>
 #include <boost/fusion/algorithm/transformation/insert.hpp>
 #include <boost/fusion/algorithm/transformation/join.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -17,6 +17,7 @@
 #include <boost/fusion/support/is_view.hpp>
 #include <boost/fusion/support/tag_of.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/identity.hpp>
 #include <boost/mpl/eval_if.hpp>
@@ -30,6 +31,9 @@
         template <typename Seq>
         struct clear
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+
 #ifdef BOOST_NO_VARIADIC_TEMPLATES
             typedef vector0<> vec;
 #else
@@ -40,10 +44,7 @@
                 mpl::eval_if<
                     traits::is_view<Seq>
                   , mpl::identity<vec>
- , result_of::convert<
- typename traits::tag_of<Seq>::type
- , vec
- >
+ , convert<typename traits::tag_of<Seq>::type, vec>
>::type
             type;
         };

Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,79 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_HPP
+
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/view/detail/view_storage.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/ref.hpp>
+
+#include <boost/mpl/bool.hpp>
+
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view/filter_key_view_fwd.hpp>
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view/has_key_impl.hpp>
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp>
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view/value_at_key_impl.hpp>
+
+//TODO: test
+
+namespace boost { namespace fusion
+{
+ struct fusion_sequence_tag;
+
+ namespace detail
+ {
+ template <typename Seq, typename Pred>
+ struct filter_key_view
+ : sequence_base<filter_key_view<Seq, Pred> >
+ {
+ typedef view_storage<Seq> storage_type;
+ typedef typename storage_type::type seq_type;
+ typedef Pred pred_type;
+
+ typedef associative_sequence_tag category;
+ typedef filter_key_view_tag fusion_tag;
+ typedef fusion_sequence_tag tag;
+ typedef mpl::true_ is_view;
+
+#define FILTER_KEY_VIEW_CTOR(COMBINATION,_)\
+ template<typename OtherSeq>\
+ filter_key_view(filter_key_view<OtherSeq,Pred> COMBINATION view)\
+ : seq(static_cast<filter_key_view<OtherSeq,Pred>COMBINATION>(\
+ view).seq)\
+ {}
+
+ BOOST_FUSION_ALL_CTOR_COMBINATIONS(FILTER_KEY_VIEW_CTOR,_)
+
+#undef FILTER_KEY_VIEW_CTOR
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ explicit
+ filter_key_view(typename storage_type::call_param seq)
+ : seq(seq)
+ {}
+#else
+ template<typename OtherSeq>
+ explicit
+ filter_key_view(OtherSeq&& seq)
+ : seq(std::forward<OtherSeq>(seq))
+ {}
+#endif
+
+ template<typename OtherFilterKeyView>
+ filter_key_view&
+ operator=(BOOST_FUSION_R_ELSE_CLREF(OtherFilterKeyView) other_view)
+ {
+ seq=BOOST_FUSION_FORWARD(OtherFilterKeyView,other_view).seq;
+ return *this;
+ }
+
+ detail::view_storage<Seq> seq;
+ };
+ }
+}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/at_key_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,41 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_AT_KEY_IMPL_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_AT_KEY_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/at_key.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct at_key_impl;
+
+ template <>
+ struct at_key_impl<detail::filter_key_view_tag>
+ {
+ template <typename SeqRef,typename Key>
+ struct apply
+ {
+ typedef typename
+ result_of::at_key<
+ typename detail::forward_as<
+ SeqRef
+ , typename detail::remove_reference<SeqRef>::type_seq_type
+ >::type
+ , Key
+ >::type
+ type;
+
+ static type
+ call(SeqRef seq)
+ {
+ return at_key<Key>(seq.seq.get());
+ }
+ };
+ };
+}}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/filter_key_view_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/filter_key_view_fwd.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,14 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_FILTER_KEY_VIEW_FWD_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_FILTER_KEY_VIEW_FWD_HPP
+
+namespace boost { namespace fusion { namespace detail
+{
+ struct filter_key_view_tag;
+}}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/has_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/has_key_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,40 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_HAS_KEY_IMPL_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_HAS_KEY_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/has_key.hpp>
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct has_key;
+
+ template <>
+ struct has_key<detail::filter_key_view_tag>
+ {
+ template <typename SeqRef,typename Key>
+ struct apply
+ {
+ typedef typename detail::remove_reference<SeqRef>::type seq;
+
+ typedef typename
+ mpl::eval_if<
+ mpl::apply1<typename seq::pred_type,Key>
+ , mpl::identity<mpl::false_>
+ , result_of::has_key<typename seq::storage_type,Key>
+ >::type
+ type;
+ };
+ };
+}}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/value_at_key_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/filter_key_view/value_at_key_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,32 @@
+// Copyright Christopher Schmidt 2009.
+// 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_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_VALUE_AT_KEY_IMPL_HPP
+#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_FILTER_KEY_VIEW_VALUE_AT_KEY_IMPL_HPP
+
+#include <boost/fusion/sequence/intrinsic/value_at_key.hpp>
+
+namespace boost { namespace fusion { namespace extension
+{
+ template <typename Tag>
+ struct value_at_key;
+
+ template <>
+ struct value_at_key<detail::filter_key_view_tag>
+ {
+ template <typename SeqRef,typename Key>
+ struct apply
+ {
+ typedef typename
+ result_of::value_at_key<
+ typename detail::remove_reference<SeqRef>::type_seq_type
+ , Key
+ >::type
+ type;
+ };
+ };
+}}}
+
+#endif

Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/is_in_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/is_in_seq.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,54 @@
+// Copyright Christopher Schmidt 2009.
+// 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_DETAIL_IS_IN_SEQ_HPP
+#define BOOST_FUSION_SUPPORT_DETAIL_IS_IN_SEQ_HPP
+
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/begin.hpp>
+# include <boost/fusion/sequence/intrinsic/end.hpp>
+# include <boost/fusion/iterator/next.hpp>
+# include <boost/fusion/iterator/next.hpp>
+# include <boost/fusion/iterator/equal_to.hpp>
+
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/eval_if.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename It, typename Begin,typename End>
+ struct next_is_in_range;
+
+ template<typename It, typename Begin,typename End>
+ struct is_in_range
+ : mpl::eval_if<
+ result_of::equal_to<It,Begin>
+ , mpl::identity<mpl::true_>
+ , mpl::eval_if<
+ result_of::equal_to<Begin,End>
+ , mpl::identity<mpl::false_>
+ , next_is_in_range<It,Begin,End>
+ >
+ >::type
+ {};
+
+ template<typename It, typename Begin,typename End>
+ struct next_is_in_range
+ : is_in_range<It,typename result_of::next<Begin>::type,End>
+ {};
+
+ template<typename It, typename Seq>
+ struct is_in_seq
+ : is_in_range<
+ It
+ , typename result_of::begin<Seq>::type
+ , typename result_of::end<Seq>::type
+ >
+ {};
+}}}
+
+#endif
+#endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,12 @@
 #include <boost/fusion/view/zip_view.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/template.hpp>
+#include <boost/fusion/support/assert.hpp>
+
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#endif
 
 namespace boost { namespace fusion
 {
@@ -37,6 +43,15 @@
         struct zip
             EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(FUSION_MAX_ZIP_SEQUENCES,N)
         {
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERS
+#define BOOST_FUSION_IS_FORWARD_ASSERT(Z,N,_)\
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<BOOST_PP_CAT(T,N)>));
+
+ BOOST_PP_REPEAT(N,BOOST_FUSION_IS_FORWARD_ASSERT,_)
+
+#undef BOOST_FUSION_IS_FORWARD_ASSERT
+#endif
+
             typedef
                 zip_view<
                     typename result_of::vector_tie<

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/variadic_templates/zip.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,11 @@
 #include <boost/fusion/container/generation/vector_tie.hpp>
 #include <boost/fusion/view/zip_view.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/mpl/and.hpp>
+#endif
 
 namespace boost { namespace fusion {
 
@@ -18,6 +23,9 @@
         template<typename... Seqs>
         struct zip
         {
+ //TODO variadic template to fixed length macro!!!
+ //BOOST_FUSION_MPL_ASSERT((mpl::and_<traits::is_forward<Seqs>...>));
+
             typedef
                 zip_view<typename result_of::vector_tie<Seqs...>::type>
             type;

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,12 +8,15 @@
 #ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_ERASE_HPP
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_ERASE_HPP
 
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
 #include <boost/fusion/view/joint_view/joint_view.hpp>
 #include <boost/fusion/view/iterator_range/iterator_range.hpp>
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/algorithm/transformation/detail/is_in_seq.hpp>
 
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/identity.hpp>
@@ -69,13 +72,16 @@
>
         struct erase
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef typename begin<Seq>::type seq_first_type;
             typedef typename end<Seq>::type seq_last_type;
 
- //TODO cschmidt: !
- //BOOST_FUSION_STATIC_ASSERT(
- // (!equal_to<seq_first_type, seq_last_type>::value),
- // "sequence empty");
+ BOOST_FUSION_MPL_ASSERT(
+ (detail::is_in_range<First,seq_first_type,seq_last_type>));
+ BOOST_FUSION_MPL_ASSERT(
+ (detail::is_in_range<Last,First,seq_last_type>));
 
             typedef
                 iterator_range<

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/erase_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,8 +10,20 @@
 
 #include <boost/fusion/algorithm/query/find_key.hpp>
 #include <boost/fusion/algorithm/transformation/erase.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#endif
+#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
 
+#include <boost/fusion/algorithm/transformation/detail/filter_key_view.hpp>
+
+//TODO doc singular?!
 namespace boost { namespace fusion
 {
     namespace result_of
@@ -19,33 +31,63 @@
         template <typename Seq, typename Key>
         struct erase_key
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<Seq>));
+ BOOST_FUSION_MPL_ASSERT((has_key<Seq,Key>));
+
             typedef typename
- erase<
- Seq
- , typename find_key<
- typename detail::add_lref<Seq>::type
- , Key
- >::type
+ mpl::eval_if<
+ traits::is_forward<Seq>
+ , erase<
+ Seq
+ , typename find_key<
+ typename detail::add_lref<Seq>::type
+ , Key
+ >::type
+ >
+ , mpl::identity<
+ detail::filter_key_view<Seq,is_same<mpl::_1,Key> >
+ >
>::type
             type;
+
+ static type
+ call_impl(Seq seq,mpl::true_ /*is_forward*/)
+ {
+ return fusion::erase(seq,fusion::find_key<Key>(seq));
+ }
+
+ static type
+ call_impl(Seq seq,mpl::false_ /*is_forward*/)
+ {
+ return type(seq);
+ }
+
+ static type
+ call(Seq seq)
+ {
+ return call_impl(seq,typename traits::is_forward<Seq>::type());
+ }
         };
     }
 
- //TODO test const
     template <typename Key, typename Seq>
     inline typename
         result_of::erase_key<BOOST_FUSION_R_ELSE_CLREF(Seq), Key>::type
     erase_key(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
- return erase(BOOST_FUSION_FORWARD(Seq,seq),find_key<Key>(seq));
+ return
+ result_of::erase_key<BOOST_FUSION_R_ELSE_CLREF(Seq), Key>::call(
+ seq);
     }
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Key, typename Seq>
- inline typename result_of::erase_key<Seq&, Key>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::erase_key<,Seq,&, Key>)
     erase_key(Seq& seq)
     {
- return erase(seq,find_key<Key>(seq));
+ return result_of::erase_key<Seq&, Key>::call(seq);
     }
 #endif
 }}

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,8 +9,10 @@
 #ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_FILTER_HPP
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_FILTER_HPP
 
-#include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/algorithm/transformation/filter_if.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
 
 #include <boost/mpl/placeholders.hpp>
 #include <boost/type_traits/is_same.hpp>
@@ -21,8 +23,10 @@
     {
         template <typename Seq, typename T>
         struct filter
+ : filter_if<Seq, is_same<mpl::_1, T> >
         {
- typedef filter_view<Seq, is_same<mpl::_1, T> > type;
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
         };
     }
 
@@ -30,18 +34,16 @@
     inline typename result_of::filter<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type
     filter(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
- return typename
- result_of::filter<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type(
- BOOST_FUSION_FORWARD(Seq,seq));
+ return filter_if<is_same<mpl::_1, T> >(BOOST_FUSION_FORWARD(Seq,seq));
     }
 
- //TODO!!!
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename T, typename Seq>
- inline typename result_of::filter<Seq&, T>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::filter<,Seq,&, T>)
     filter(Seq& seq)
     {
- return typename result_of::filter<Seq&, T>::type(seq);
+ return filter_if<is_same<mpl::_1, T> >(seq);
     }
 #endif
 }}

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/filter_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,9 @@
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_FILTER_IF_HPP
 
 #include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
 
 namespace boost { namespace fusion
 {
@@ -17,6 +20,9 @@
         template <typename Seq, typename Pred>
         struct filter_if
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef filter_view<Seq, Pred> type;
         };
     }
@@ -33,7 +39,8 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Pred, typename Seq>
- inline typename result_of::filter_if<Seq&, Pred>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::filter_if<,Seq,&, Pred>)
     filter_if(Seq& seq)
     {
         return typename result_of::filter_if<Seq&, Pred>::type(seq);

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,8 @@
 #include <boost/fusion/view/single_view/single_view.hpp>
 #include <boost/fusion/algorithm/transformation/insert_range.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/algorithm/transformation/detail/is_in_seq.hpp>
 
 namespace boost { namespace fusion
 {
@@ -21,9 +23,14 @@
           : insert_range<
                 Seq
               , Pos
- , single_view<typename detail::as_fusion_element<T>::type>
+ , BOOST_FUSION_R_ELSE_CLREF(
+ single_view<typename detail::as_fusion_element<T>::type>)
>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT((detail::is_in_seq<Pos, Seq>));
+ };
     }
 
     template <typename Seq, typename Pos, typename T>

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/insert_range.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,6 +14,8 @@
 #include <boost/fusion/view/iterator_range/iterator_range.hpp>
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/algorithm/transformation/detail/is_in_seq.hpp>
 
 #include <boost/preprocessor/empty.hpp>
 
@@ -24,6 +26,12 @@
         template <typename Seq, typename Pos, typename Range>
         struct insert_range
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT((detail::is_in_seq<Pos, Seq>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Range>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Range>));
+
             typedef
                 iterator_range<
                     typename begin<Seq>::type

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/join.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,8 @@
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_JOIN_HPP
 
 #include <boost/fusion/view/joint_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/preprocessor/empty.hpp>
 
@@ -17,29 +19,34 @@
 
     namespace result_of
     {
- template<typename Lhs, typename Rhs>
+ template<typename Seq1, typename Seq2>
         struct join
         {
- typedef joint_view<Lhs,Rhs> type;
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
+ typedef joint_view<Seq1,Seq2> type;
         };
     }
 
-#define BOOST_FUSION_JOIN(LHS_CV_REF_MODIFIER,RHS_CV_REF_MODIFIER)\
- template<typename Lhs, typename Rhs>\
+#define BOOST_FUSION_JOIN(SEQ1_CV_REF_MODIFIER,SEQ2_CV_REF_MODIFIER)\
+ template<typename Seq1, typename Seq2>\
     inline typename\
         result_of::join<\
- Lhs LHS_CV_REF_MODIFIER\
- , Rhs RHS_CV_REF_MODIFIER\
+ Seq1 SEQ1_CV_REF_MODIFIER\
+ , Seq2 SEQ2_CV_REF_MODIFIER\
>::type\
- join(Lhs LHS_CV_REF_MODIFIER lhs,\
- Rhs RHS_CV_REF_MODIFIER rhs)\
+ join(Seq1 SEQ1_CV_REF_MODIFIER seq1,\
+ Seq2 SEQ2_CV_REF_MODIFIER seq2)\
     {\
         return typename\
             result_of::join<\
- Lhs LHS_CV_REF_MODIFIER\
- , Rhs RHS_CV_REF_MODIFIER\
- >::type(BOOST_FUSION_FORWARD(Lhs LHS_CV_REF_MODIFIER,lhs)\
- , BOOST_FUSION_FORWARD(Rhs RHS_CV_REF_MODIFIER,rhs));\
+ Seq1 SEQ1_CV_REF_MODIFIER\
+ , Seq2 SEQ2_CV_REF_MODIFIER\
+ >::type(BOOST_FUSION_FORWARD(Seq1 SEQ1_CV_REF_MODIFIER,seq1)\
+ , BOOST_FUSION_FORWARD(Seq2 SEQ2_CV_REF_MODIFIER,seq2));\
     }
 
     BOOST_FUSION_JOIN(

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_back.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,15 @@
 #ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_POP_BACK_HPP
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_POP_BACK_HPP
 
-#include <boost/fusion/view/iterator_range/iterator_range.hpp>
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
 #include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -20,6 +25,10 @@
         template <typename Seq>
         struct pop_back
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT((size<Seq>));
+
             typedef
                 iterator_range<
                     typename begin<Seq>::type

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/pop_front.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,15 @@
 #ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_POP_FRONT_HPP
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_POP_FRONT_HPP
 
-#include <boost/fusion/view/iterator_range/iterator_range.hpp>
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
 #include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/view/iterator_range/iterator_range.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -20,6 +25,10 @@
         template <typename Seq>
         struct pop_front
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT((size<Seq>));
+
             typedef
                 iterator_range<
                     typename next<typename begin<Seq>::type>::type

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_back.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,8 @@
 #include <boost/fusion/view/joint_view/joint_view.hpp>
 #include <boost/fusion/view/single_view/single_view.hpp>
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -19,6 +21,9 @@
         template <typename Seq, typename T>
         struct push_back
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef
                 joint_view<
                     Seq

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/push_front.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,8 @@
 #include <boost/fusion/view/joint_view/joint_view.hpp>
 #include <boost/fusion/view/single_view/single_view.hpp>
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -19,6 +21,9 @@
         template <typename Seq, typename T>
         struct push_front
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef
                 joint_view<
                     single_view<typename detail::as_fusion_element<T>::type>

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,10 @@
 #ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_REMOVE_HPP
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_REMOVE_HPP
 
-#include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/algorithm/transformation/remove_if.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
 
 #include <boost/mpl/not.hpp>
 #include <boost/mpl/placeholders.hpp>
@@ -20,10 +23,10 @@
     {
         template <typename Seq, typename T>
         struct remove
+ : remove_if<Seq, is_same<mpl::_1, T> >
         {
- typedef
- filter_view<Seq, mpl::not_<is_same<mpl::_1, T> > >
- type;
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
         };
     }
 
@@ -31,17 +34,16 @@
     inline typename result_of::remove<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type
     remove(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
- return typename
- result_of::remove<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type(
- BOOST_FUSION_FORWARD(Seq,seq));
+ return remove_if<is_same<mpl::_1, T> >(BOOST_FUSION_FORWARD(Seq,seq));
     }
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename T, typename Seq>
- inline typename result_of::remove<Seq&, T>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::remove<,Seq,&, T>)
     remove_if(Seq& seq)
     {
- return typename result_of::remove<Seq&, T>::type(seq);
+ return remove_if<is_same<mpl::_1, T> >(seq);
     }
 #endif
 }}

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,10 @@
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_REMOVE_IF_HPP
 
 #include <boost/fusion/view/filter_view/filter_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
+
 #include <boost/mpl/not.hpp>
 
 namespace boost { namespace fusion
@@ -18,9 +22,10 @@
         template <typename Seq, typename Pred>
         struct remove_if
         {
- typedef
- filter_view<Seq, mpl::not_<Pred> >
- type;
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
+ typedef filter_view<Seq, mpl::not_<Pred> > type;
         };
     }
 
@@ -36,7 +41,8 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename Pred, typename Seq>
- inline typename result_of::remove_if<Seq&, Pred>::type
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::remove_if<,Seq,&, Pred>)
     remove_if(Seq& seq)
     {
         return typename result_of::remove_if<Seq&, Pred>::type(seq);

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
 
 #include <boost/fusion/algorithm/transformation/replace_if.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
 
 namespace boost { namespace fusion
@@ -55,6 +56,9 @@
         template <typename Seq, typename T>
         struct replace
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef
                 detail::replace_helper<
                     typename detail::as_fusion_element<T>::type
@@ -67,7 +71,6 @@
         };
     }
 
- //TODO cschmidt: Assert compatibility Old-/NewValue!
     template <typename Seq, typename OldValue, typename NewValue>
     inline typename
         result_of::replace<

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/replace_if.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
 #include <boost/fusion/view/transform_view/transform_view.hpp>
 #include <boost/fusion/algorithm/transformation/detail/replace_if.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/support/detail/as_fusion_element.hpp>
 
 namespace boost { namespace fusion
@@ -20,6 +21,9 @@
         template <typename Seq, typename F, typename NewValue>
         struct replace_if
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef
                 detail::replace_if_helper<
                     typename detail::as_fusion_element<F>::type

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/reverse.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_REVERSE_HPP
 
 #include <boost/fusion/view/reverse_view/reverse_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -17,6 +19,9 @@
         template <typename Seq>
         struct reverse
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef reverse_view<Seq> type;
         };
     }
@@ -25,7 +30,8 @@
     inline typename result_of::reverse<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type
     reverse(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
     {
- return typename result_of::reverse<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type(
+ return typename
+ result_of::reverse<BOOST_FUSION_R_ELSE_CLREF(Seq)>::type(
                 BOOST_FUSION_FORWARD(Seq,seq));
     }
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/transform.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
 #define BOOST_FUSION_ALGORITHM_TRANSFORMATION_TRANSFORM_HPP
 
 #include <boost/fusion/view/transform_view/transform_view.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/preprocessor/empty.hpp>
 
@@ -21,6 +23,11 @@
         template <typename Seq1, typename Seq2, typename F = void_>
         struct transform
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
             typedef transform_view<Seq1,Seq2,F> type;
         };
 
@@ -31,6 +38,9 @@
         struct transform<Seq, F>
 #endif
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef transform_view<Seq, F> type;
         };
     }

Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/zip.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,10 +11,8 @@
 
 #include <boost/config.hpp>
 
-#if defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-# ifndef FUSION_MAX_ZIP_SEQUENCES
-# define FUSION_MAX_ZIP_SEQUENCES 10
-# endif
+#if (defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)) && !defined(FUSION_MAX_ZIP_SEQUENCES)
+# define FUSION_MAX_ZIP_SEQUENCES 10
 #endif
 
 #ifdef BOOST_NO_VARIADIC_TEMPLATES

Modified: sandbox/SOC/2009/fusion/boost/fusion/container.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,10 @@
 #ifndef BOOST_FUSION_CONTAINER_HPP
 #define BOOST_FUSION_CONTAINER_HPP
 
-#include <boost/fusion/container/vector.hpp>
+#include <boost/fusion/container/generation.hpp>
 #include <boost/fusion/container/list.hpp>
 #include <boost/fusion/container/map.hpp>
 #include <boost/fusion/container/set.hpp>
-#include <boost/fusion/container/generation.hpp>
+#include <boost/fusion/container/vector.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,14 +8,16 @@
 #ifndef BOOST_FUSION_CONTAINER_GENERATION_HPP
 #define BOOST_FUSION_CONTAINER_GENERATION_HPP
 
-#include <boost/fusion/container/generation/ignore.hpp>
 #include <boost/fusion/container/generation/cons_tie.hpp>
+#include <boost/fusion/container/generation/ignore.hpp>
 #include <boost/fusion/container/generation/list_tie.hpp>
 #include <boost/fusion/container/generation/make_cons.hpp>
 #include <boost/fusion/container/generation/make_list.hpp>
 #include <boost/fusion/container/generation/make_map.hpp>
+#include <boost/fusion/container/generation/make_set.hpp>
 #include <boost/fusion/container/generation/make_vector.hpp>
+#include <boost/fusion/container/generation/map_tie.hpp>
+#include <boost/fusion/container/generation/pair_tie.hpp>
 #include <boost/fusion/container/generation/vector_tie.hpp>
-#include <boost/fusion/container/generation/make_set.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,7 @@
 #ifndef BOOST_FUSION_CONTAINER_LIST_HPP
 #define BOOST_FUSION_CONTAINER_LIST_HPP
 
+#include <boost/fusion/container/list/limits.hpp>
 #include <boost/fusion/container/list/cons.hpp>
 #include <boost/fusion/container/list/list.hpp>
 #include <boost/fusion/container/list/convert.hpp>

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,16 @@
 
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/front.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/empty.hpp>
+#endif
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/assign_tags.hpp>
 #include <boost/fusion/support/sequence_assign.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/int.hpp>
 #include <boost/mpl/bool.hpp>
@@ -64,7 +68,15 @@
         template<typename SeqAssign>
         nil(BOOST_FUSION_R_ELSE_CLREF(SeqAssign))
         {
- //TODO cschmidt: assert!
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ BOOST_FUSION_MPL_ASSERT((
+ result_of::empty<typename SeqAssign::seq_type>));
+#else
+ BOOST_FUSION_MPL_ASSERT((
+ result_of::empty<
+ typename detail::remove_reference<SeqAssign>::type::seq_type
+ >));
+#endif
         }
 
         template<typename It>
@@ -75,7 +87,7 @@
         nil&
         operator=(BOOST_FUSION_R_ELSE_CLREF(Seq))
         {
- //TODO cschmidt: assert!
+ BOOST_FUSION_MPL_ASSERT((result_of::empty<Seq>));
             return *this;
         }
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/cons/at_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
 #ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_AT_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_LIST_DETAIL_CONS_AT_IMPL_HPP
 
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
 #include <boost/mpl/int.hpp>
 
 namespace boost { namespace fusion

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,8 @@
 #ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_BEGIN_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_BEGIN_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>
@@ -23,7 +25,7 @@
             typedef
                 basic_iterator<
                     list_iterator_tag
- , forward_traversal_tag
+ , bidirectional_traversal_tag
                   , SeqRef
                   , 0
>

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/list/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
 #ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_END_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_LIST_DETAIL_LIST_END_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
 #include <boost/fusion/sequence/intrinsic/size.hpp>
 
 namespace boost { namespace fusion { namespace extension
@@ -25,7 +26,7 @@
             typedef
                 basic_iterator<
                     list_iterator_tag
- , forward_traversal_tag
+ , bidirectional_traversal_tag
                   , SeqRef
                   , result_of::size<SeqRef>::type::value
>

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/list.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,7 +10,6 @@
 
 #include <boost/fusion/container/list/list_fwd.hpp>
 #include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/ref.hpp>
 
@@ -31,7 +30,7 @@
     struct list
       : sequence_base<list<EXPAND_TEMPLATE_ARGUMENTS(FUSION_MAX_LIST_SIZE)> >
     {
- typedef forward_traversal_tag category;
+ typedef bidirectional_traversal_tag category;
         typedef list_tag fusion_tag;
         typedef fusion_sequence_tag tag;
         typedef mpl::false_ is_view;

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/list_fwd.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -16,6 +16,7 @@
     struct list_tag;
     struct list_iterator_tag;
     struct forward_traversal_tag;
+ struct bidirectional_traversal_tag;
 
     VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_LIST_SIZE)
     struct list;

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,6 +6,8 @@
 #ifndef BOOST_FUSION_CONTAINER_MAP_DETAIL_BEGIN_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_MAP_DETAIL_BEGIN_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/detail/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,6 +6,8 @@
 #ifndef BOOST_FUSION_CONTAINER_MAP_DETAIL_END_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_MAP_DETAIL_END_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/map.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,6 @@
 
 #include <boost/fusion/container/map/map_fwd.hpp>
 #include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
 #include <boost/fusion/support/pair.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/ref.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/map/map_fwd.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,7 +18,7 @@
     struct map_iterator_tag;
 
     struct map_category
- : forward_traversal_tag, associative_sequence_tag
+ : bidirectional_traversal_tag, associative_sequence_tag
     {};
 
     VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_MAP_SIZE)

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,6 +6,8 @@
 #ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_BEGIN_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_SET_DETAIL_BEGIN_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/detail/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,6 +6,8 @@
 #ifndef BOOST_FUSION_CONTAINER_SET_DETAIL_END_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_SET_DETAIL_END_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/set.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,6 @@
 
 #include <boost/fusion/container/set/set_fwd.hpp>
 #include <boost/fusion/container/vector/vector.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/ref.hpp>
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/set/set_fwd.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,7 +18,7 @@
     struct set_iterator_tag;
 
     struct set_category
- : forward_traversal_tag, associative_sequence_tag
+ : bidirectional_traversal_tag, associative_sequence_tag
     {};
 
     VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_SET_SIZE)

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
 #ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_BEGIN_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_BEGIN_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
 #ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_END_IMPL_HPP
 #define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_END_IMPL_HPP
 
+#include <boost/fusion/iterator/basic_iterator.hpp>
+
 namespace boost { namespace fusion { namespace extension
 {
     template <typename Tag>

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,7 +6,6 @@
 #ifndef BOOST_PP_IS_ITERATING
 # include <boost/fusion/container/vector/vector_fwd.hpp>
 # include <boost/fusion/sequence/intrinsic/begin.hpp>
-# include <boost/fusion/iterator/basic_iterator.hpp>
 # include <boost/fusion/iterator/deref.hpp>
 # include <boost/fusion/iterator/next.hpp>
 # include <boost/fusion/iterator/advance_c.hpp>

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,6 +14,7 @@
 #include <boost/fusion/support/sequence_assign.hpp>
 #include <boost/fusion/support/assign_tags.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/int.hpp>
 
@@ -151,13 +152,19 @@
         vector(BOOST_FUSION_R_ELSE_CLREF(OtherArguments)... arguments)
           : base(detail::assign_directly(),
                  BOOST_FUSION_FORWARD(OtherArguments,arguments)...)
- {}
+ {
+ BOOST_FUSION_STATIC_ASSERT((
+ sizeof...(Elements)==sizeof...(OtherArguments)));
+ }
 
 #define VECTOR_ASSIGN_CTOR(COMBINATION,_)\
         template<typename SeqRef>\
         vector(support::sequence_assign_type<SeqRef> COMBINATION seq_assign)\
           : base(detail::assign_by_deref(),fusion::begin(seq_assign.get()))\
- {}
+ {\
+ BOOST_FUSION_STATIC_ASSERT((\
+ sizeof...(Elements)==result_of::size<SeqRef>::value));\
+ }
 
         BOOST_FUSION_ALL_CTOR_COMBINATIONS(VECTOR_ASSIGN_CTOR,_);
 
@@ -176,6 +183,9 @@
         vector&
         operator=(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
         {
+ BOOST_FUSION_STATIC_ASSERT((
+ sizeof...(Elements)==result_of::size<Seq>::value));
+
             static_cast<base*>(this)->assign(
                 fusion::begin(BOOST_FUSION_FORWARD(Seq,seq)));
             return *this;

Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/vector.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,7 +12,6 @@
 # include <boost/fusion/container/vector/detail/pp/vector.hpp>
 #else
 # include <boost/fusion/container/vector/vector_fwd.hpp>
-# include <boost/fusion/iterator/basic_iterator.hpp>
 # include <boost/fusion/support/ref.hpp>
 
 # include <boost/fusion/container/vector/detail/at_impl.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,11 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_ADAPTER_HPP
 #define BOOST_FUSION_FUNCTIONAL_ADAPTER_HPP
 
-#include <boost/fusion/functional/adapter/fused.hpp>
-#include <boost/fusion/functional/adapter/fused_procedure.hpp>
 #include <boost/fusion/functional/adapter/fused_function_object.hpp>
-#include <boost/fusion/functional/adapter/unfused.hpp>
+#include <boost/fusion/functional/adapter/fused_procedure.hpp>
+#include <boost/fusion/functional/adapter/fused.hpp>
+#include <boost/fusion/functional/adapter/limits.hpp>
 #include <boost/fusion/functional/adapter/unfused_typed.hpp>
+#include <boost/fusion/functional/adapter/unfused.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,9 +9,9 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_HPP
 #define BOOST_FUSION_FUNCTIONAL_GENERATION_HPP
 
-#include <boost/fusion/functional/generation/make_fused.hpp>
-#include <boost/fusion/functional/generation/make_fused_procedure.hpp>
 #include <boost/fusion/functional/generation/make_fused_function_object.hpp>
+#include <boost/fusion/functional/generation/make_fused_procedure.hpp>
+#include <boost/fusion/functional/generation/make_fused.hpp>
 #include <boost/fusion/functional/generation/make_unfused.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,8 +9,9 @@
 #ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_HPP
 #define BOOST_FUSION_FUNCTIONAL_INVOCATION_HPP
 
-#include <boost/fusion/functional/invocation/invoke.hpp>
-#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
 #include <boost/fusion/functional/invocation/invoke_function_object.hpp>
+#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
+#include <boost/fusion/functional/invocation/invoke.hpp>
+#include <boost/fusion/functional/invocation/limits.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,14 +8,18 @@
 #ifndef BOOST_FUSION_ITERATOR_HPP
 #define BOOST_FUSION_ITERATOR_HPP
 
-#include <boost/fusion/iterator/iterator_facade.hpp>
-#include <boost/fusion/iterator/basic_iterator.hpp>
+#include <boost/fusion/iterator/advance_c.hpp>
 #include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/iterator/basic_iterator.hpp>
+#include <boost/fusion/iterator/deref_data.hpp>
 #include <boost/fusion/iterator/deref.hpp>
 #include <boost/fusion/iterator/distance.hpp>
 #include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/iterator/iterator_facade.hpp>
+#include <boost/fusion/iterator/key_of.hpp>
 #include <boost/fusion/iterator/next.hpp>
 #include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/value_of_data.hpp>
 #include <boost/fusion/iterator/value_of.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/advance.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/advance.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/advance.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -22,7 +22,6 @@
         template <typename Tag>
         struct advance_impl
         {
- // default implementation
             template <typename ItRef, typename N>
             struct apply
               : mpl::if_c<
@@ -30,11 +29,7 @@
                   , advance_detail::forward<ItRef, N::value>
                   , advance_detail::backward<ItRef, N::value>
>::type
- {
-// BOOST_FUSION_MPL_ASSERT_NOT(
-// traits::is_random_access<ItRef>,
-// "default implementation not available for random access iterators");
- };
+ {};
         };
 
         template <>
@@ -57,13 +52,26 @@
                     typename detail::add_lref<It>::type
                   , mpl::int_<N>
>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ BOOST_FUSION_STATIC_ASSERT((
+ N>=0 ||
+ traits::is_bidirectional<It>::value));
+
+ };
 
         template <typename It, typename N>
         struct advance
           : extension::advance_impl<typename traits::tag_of<It>::type>::
                 template apply<typename detail::add_lref<It>::type, N>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ BOOST_FUSION_STATIC_ASSERT((
+ N::value>=0 ||
+ traits::is_bidirectional<It>::value));
+ };
     }
 
     template <int N, typename It>
@@ -79,7 +87,6 @@
     {
         return result_of::advance<It const&, N>::call(it);
     }
-
 }}
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/basic_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/basic_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/basic_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,7 @@
 
 #include <boost/fusion/iterator/iterator_facade.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/equal_to.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/deref.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/deref.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/deref.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/iterator_base.hpp>
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -37,7 +38,10 @@
         struct deref
           : extension::deref_impl<typename traits::tag_of<It>::type>::
                 template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ };
     }
 
     template <typename It>

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/deref_data.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/deref_data.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/deref_data.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
 
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -37,7 +38,10 @@
         struct deref_data
           : extension::deref_data_impl<typename traits::tag_of<It>::type>::
                 template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<It>));
+ };
     }
 
     template <typename It>

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/distance.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -15,9 +15,7 @@
 namespace boost { namespace fusion
 {
     struct random_access_traversal_tag;
-
- // Special tags:
- struct iterator_facade_tag; // iterator facade tag
+ struct iterator_facade_tag;
 
     namespace extension
     {
@@ -28,14 +26,7 @@
             template <typename FirstRef, typename LastRef>
             struct apply
               : distance_detail::linear_distance<FirstRef, LastRef>
- {
- /*BOOST_FUSION_MPL_ASSERT_NOT(
- traits::is_random_access<FirstRef>,
- "default implementation not available for random access iterators");
- BOOST_FUSION_MPL_ASSERT_NOT(
- traits::is_random_access<FirstRef>,
- "default implementation not available for random access iterators");*/
- };
+ {};
         };
 
         template <>
@@ -59,6 +50,10 @@
                   , typename detail::add_lref<Last>::type
>::type
         {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<First>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<First>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<Last>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Last>));
         };
     }
 

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,10 @@
 #ifndef BOOST_FUSION_ITERATOR_EQUAL_TO_HPP
 #define BOOST_FUSION_ITERATOR_EQUAL_TO_HPP
 
-#include <boost/type_traits/is_same.hpp>
 #include <boost/fusion/support/tag_of.hpp>
-#include <boost/type_traits/add_const.hpp>
 #include <boost/fusion/support/is_iterator.hpp>
+#include <boost/fusion/support/assert.hpp>
+
 #include <boost/mpl/and.hpp>
 #include <boost/utility/enable_if.hpp>
 
@@ -44,7 +44,12 @@
                     typename detail::add_lref<It1>::type
                   , typename detail::add_lref<It2>::type
>::type
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It1>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It2>));
+ };
     }
 
     namespace iterator_operators
@@ -52,7 +57,7 @@
         template <typename It1, typename It2>
         inline typename
             enable_if<
- mpl::and_<is_fusion_iterator<It1>, is_fusion_iterator<It2> >
+ mpl::and_<traits::is_iterator<It1>, traits::is_iterator<It2> >
               , bool
>::type
         operator==(It1 const&, It2 const&)
@@ -63,7 +68,7 @@
         template <typename It1, typename It2>
         inline typename
             enable_if<
- mpl::and_<is_fusion_iterator<It1>, is_fusion_iterator<It2> >
+ mpl::and_<traits::is_iterator<It1>, traits::is_iterator<It2> >
               , bool
>::type
         operator!=(It1 const&, It1 const&)

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/key_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/key_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/key_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
 #define BOOST_FUSION_ITERATOR_KEY_OF_HPP
 
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -36,7 +37,10 @@
         struct key_of
           : extension::key_of_impl<typename traits::tag_of<It>::type>::
                 template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<It>));
+ };
     }
 }}
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/next.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/next.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/next.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
 #define BOOST_FUSION_ITERATOR_NEXT_HPP
 
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -35,7 +36,10 @@
         struct next
           : extension::next_impl<typename traits::tag_of<It>::type>::
                 template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ };
     }
 
     template <typename It>

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/prior.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/prior.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/prior.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
 #define BOOST_FUSION_ITERATOR_PRIOR_HPP
 
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -35,7 +36,10 @@
         struct prior
           : extension::prior_impl<typename traits::tag_of<It>::type>::
                 template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_bidirectional<It>));
+ };
     }
 
     template <typename It>

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
 #define BOOST_FUSION_ITERATOR_VALUE_OF_HPP
 
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -35,7 +36,10 @@
         struct value_of
           : extension::value_of_impl<typename traits::tag_of<It>::type>::
                 template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<It>));
+ };
     }
 }}
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of_data.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of_data.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/iterator/value_of_data.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,6 +9,7 @@
 #define BOOST_FUSION_ITERATOR_VALUE_OF_DATA_HPP
 
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -36,7 +37,10 @@
         struct value_of_data
           : extension::value_of_data_impl<typename traits::tag_of<It>::type>::
                 template apply<typename detail::add_lref<It>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<It>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<It>));
+ };
     }
 }}
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/mpl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/mpl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/mpl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,18 +8,21 @@
 #ifndef BOOST_FUSION_MPL_HPP
 #define BOOST_FUSION_MPL_HPP
 
+#include <boost/fusion/support/category_of.hpp>
+
 #include <boost/fusion/mpl/at.hpp>
 #include <boost/fusion/mpl/back.hpp>
 #include <boost/fusion/mpl/begin.hpp>
 #include <boost/fusion/mpl/clear.hpp>
 #include <boost/fusion/mpl/empty.hpp>
 #include <boost/fusion/mpl/end.hpp>
-#include <boost/fusion/mpl/erase.hpp>
 #include <boost/fusion/mpl/erase_key.hpp>
+#include <boost/fusion/mpl/erase.hpp>
 #include <boost/fusion/mpl/front.hpp>
+#include <boost/fusion/mpl/fusion_iterator.hpp>
 #include <boost/fusion/mpl/has_key.hpp>
-#include <boost/fusion/mpl/insert.hpp>
 #include <boost/fusion/mpl/insert_range.hpp>
+#include <boost/fusion/mpl/insert.hpp>
 #include <boost/fusion/mpl/pop_back.hpp>
 #include <boost/fusion/mpl/pop_front.hpp>
 #include <boost/fusion/mpl/push_back.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/mpl/fusion_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/mpl/fusion_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/mpl/fusion_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -29,6 +29,8 @@
         typedef It iterator;
     };
 
+ //TODO deref
+
     template <typename It>
     struct next<fusion_iterator<It> >
     {
@@ -59,7 +61,6 @@
     struct distance<fusion_iterator<First>, fusion_iterator<Last> >
       : fusion::result_of::distance<First, Last>
     {};
-
 }}
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,10 @@
 #ifndef BOOST_FUSION_SEQUENCE_HPP
 #define BOOST_FUSION_SEQUENCE_HPP
 
-#include <boost/fusion/sequence/sequence_facade.hpp>
 #include <boost/fusion/sequence/comparison.hpp>
+#include <boost/fusion/sequence/convert.hpp>
 #include <boost/fusion/sequence/intrinsic.hpp>
 #include <boost/fusion/sequence/io.hpp>
-#include <boost/fusion/sequence/convert.hpp>
+#include <boost/fusion/sequence/sequence_facade.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/enable_comparison.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/enable_comparison.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/detail/enable_comparison.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,8 +8,8 @@
 #ifndef BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_ENABLE_COMPARISON_HPP
 #define BOOST_FUSION_SEQUENCE_COMPARISON_DETAIL_ENABLE_COMPARISON_HPP
 
-#include <boost/fusion/support/is_sequence.hpp>
 #include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
 
 #include <boost/mpl/or.hpp>
 #include <boost/mpl/and.hpp>
@@ -18,16 +18,11 @@
 
 namespace boost { namespace fusion { namespace detail
 {
- template <typename SeqRef>
- struct is_native_fusion_sequence
- : is_base_of<sequence_root, typename detail::identity<SeqRef>::type>
- {};
-
     template <typename Seq1Ref, typename Seq2Ref>
     struct enable_equality
       : mpl::or_<
- is_native_fusion_sequence<Seq1Ref>
- , is_native_fusion_sequence<Seq2Ref>
+ traits::is_sequence<Seq1Ref>
+ , traits::is_sequence<Seq2Ref>
>
     {};
 
@@ -35,8 +30,8 @@
     struct enable_comparison
         : mpl::and_<
             mpl::or_<
- is_native_fusion_sequence<Seq1Ref>
- , is_native_fusion_sequence<Seq2Ref>
+ traits::is_sequence<Seq1Ref>
+ , traits::is_sequence<Seq2Ref>
>
           , mpl::equal_to<result_of::size<Seq1Ref>, result_of::size<Seq2Ref> >
>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/equal_to.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/equal_to.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,6 +12,8 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/support/assert.hpp>
+
 #include <boost/fusion/sequence/comparison/detail/equal_to.hpp>
 #include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
 
@@ -21,6 +23,11 @@
     inline bool
     equal_to(Seq1 const& seq1, Seq2 const& seq2)
     {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
         return
             detail::sequence_equal_to<
                 Seq1 const&
@@ -40,6 +47,11 @@
>::type
         operator==(Seq1 const& seq1, Seq2 const& seq2)
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
             return fusion::equal_to(seq1, seq2);
         }
     }

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,13 @@
 
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
 #ifdef FUSION_DIRECT_OPERATOR_USAGE
-#include <boost/fusion/sequence/comparison/detail/greater.hpp>
+# include <boost/fusion/sequence/comparison/detail/greater.hpp>
 #else
-#include <boost/fusion/sequence/comparison/less.hpp>
+# include <boost/fusion/sequence/comparison/less.hpp>
 #endif
 
 namespace boost { namespace fusion
@@ -25,6 +26,11 @@
     inline bool
     greater(Seq1 const& seq1, Seq2 const& seq2)
     {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
 #ifdef FUSION_DIRECT_OPERATOR_USAGE
         return
             detail::sequence_greater<
@@ -46,6 +52,11 @@
>::type
         operator>(Seq1 const& seq1, Seq2 const& seq2)
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
             return fusion::greater(seq1, seq2);
         }
     }

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater_equal.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater_equal.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/greater_equal.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,13 @@
 
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
 #ifdef FUSION_DIRECT_OPERATOR_USAGE
-#include <boost/fusion/sequence/comparison/detail/greater_equal.hpp>
+# include <boost/fusion/sequence/comparison/detail/greater_equal.hpp>
 #else
-#include <boost/fusion/sequence/comparison/less.hpp>
+# include <boost/fusion/sequence/comparison/less.hpp>
 #endif
 
 namespace boost { namespace fusion
@@ -25,6 +26,11 @@
     inline bool
     greater_equal(Seq1 const& seq1, Seq2 const& seq2)
     {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
 #ifdef FUSION_DIRECT_OPERATOR_USAGE
         return
             detail::sequence_greater_equal<
@@ -46,6 +52,11 @@
>::type
         operator>=(Seq1 const& seq1, Seq2 const& seq2)
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
             return fusion::greater_equal(seq1, seq2);
         }
     }

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,7 @@
 
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/sequence/comparison/detail/less.hpp>
 #include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
@@ -21,6 +22,11 @@
     inline bool
     less(Seq1 const& seq1, Seq2 const& seq2)
     {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
         return
             detail::sequence_less<
                 Seq1 const&
@@ -38,6 +44,11 @@
>::type
         operator<(Seq1 const& seq1, Seq2 const& seq2)
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
             return fusion::less(seq1, seq2);
         }
     }

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less_equal.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less_equal.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/less_equal.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,13 @@
 
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
-#ifdef FUSION_DIRECT_OPERATOR_USAGE
+# ifdef FUSION_DIRECT_OPERATOR_USAGE
 #include <boost/fusion/sequence/comparison/detail/less_equal.hpp>
 #else
-#include <boost/fusion/sequence/comparison/less.hpp>
+# include <boost/fusion/sequence/comparison/less.hpp>
 #endif
 
 namespace boost { namespace fusion
@@ -25,6 +26,11 @@
     inline bool
     less_equal(Seq1 const& seq1, Seq2 const& seq2)
     {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
 #ifdef FUSION_DIRECT_OPERATOR_USAGE
         return
             detail::sequence_less_equal<
@@ -75,6 +81,11 @@
>::type
         operator<=(Seq1 const& seq1, Seq2 const& seq2)
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
             return fusion::less_equal(seq1, seq2);
         }
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/not_equal_to.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/not_equal_to.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/comparison/not_equal_to.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,12 +11,13 @@
 
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/fusion/sequence/comparison/detail/enable_comparison.hpp>
 #ifdef FUSION_DIRECT_OPERATOR_USAGE
-#include <boost/fusion/sequence/comparison/detail/not_equal_to.hpp>
+# include <boost/fusion/sequence/comparison/detail/not_equal_to.hpp>
 #else
-#include <boost/fusion/sequence/comparison/equal_to.hpp>
+# include <boost/fusion/sequence/comparison/equal_to.hpp>
 #endif
 
 namespace boost { namespace fusion
@@ -25,6 +26,11 @@
     inline bool
     not_equal_to(Seq1 const& seq1, Seq2 const& seq2)
     {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
 #ifdef FUSION_DIRECT_OPERATOR_USAGE
         return
             detail::sequence_not_equal_to<
@@ -48,6 +54,11 @@
>::type
         operator!=(Seq1 const& seq1, Seq2 const& seq2)
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
             return fusion::not_equal_to(seq1, seq2);
         }
     }

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/convert.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,7 +9,9 @@
 #define BOOST_FUSION_SEQUENCE_CONVERT_HPP
 
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
+//TODO doc!!!
 namespace boost { namespace fusion
 {
     namespace extension
@@ -23,6 +25,9 @@
         template <typename Tag, typename Seq>
         struct convert
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             typedef typename extension::convert_impl<Tag> gen;
 
             typedef typename gen::

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,6 +8,8 @@
 #ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_HPP
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_HPP
 
+#include <boost/fusion/sequence/intrinsic/at_c.hpp>
+#include <boost/fusion/sequence/intrinsic/at_key.hpp>
 #include <boost/fusion/sequence/intrinsic/at.hpp>
 #include <boost/fusion/sequence/intrinsic/back.hpp>
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
@@ -16,8 +18,9 @@
 #include <boost/fusion/sequence/intrinsic/front.hpp>
 #include <boost/fusion/sequence/intrinsic/has_key.hpp>
 #include <boost/fusion/sequence/intrinsic/size.hpp>
-#include <boost/fusion/sequence/intrinsic/value_at.hpp>
-#include <boost/fusion/sequence/intrinsic/at_key.hpp>
+#include <boost/fusion/sequence/intrinsic/swap.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at_c.hpp>
 #include <boost/fusion/sequence/intrinsic/value_at_key.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,14 +8,19 @@
 #ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_AT_HPP
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_AT_HPP
 
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/container/list/list_fwd.hpp>
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
 #include <boost/fusion/support/tag_of.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/detail/workaround.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/int.hpp>
-
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/mpl/or.hpp>
+# include <boost/type_traits/is_same.hpp>
 #endif
 
 namespace boost { namespace fusion
@@ -43,12 +48,34 @@
         struct at
           : extension::at_impl<typename traits::tag_of<Seq>::type>::
                 template apply<typename detail::add_lref<Seq>::type, N>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((
+ mpl::or_<
+ traits::is_random_access<Seq>
+ , is_same<
+ typename traits::tag_of<Seq>::type
+ , list_tag
+ >
+ >));
+ BOOST_FUSION_INDEX_CHECK(N::value,size<Seq>::value);
+ };
 
         template <typename Seq, int N>
         struct at_c
           : at<Seq, mpl::int_<N> >
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((
+ mpl::or_<
+ traits::is_random_access<Seq>
+ , is_same<
+ typename traits::tag_of<Seq>::type
+ , list_tag
+ >
+ >));
+ BOOST_FUSION_INDEX_CHECK(N,size<Seq>::value);
+ };
     }
 
     template <typename N, typename Seq>
@@ -58,14 +85,10 @@
         return result_of::at<BOOST_FUSION_R_ELSE_CLREF(Seq), N>::call(seq);
     }
 
- //cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <typename N, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename lazy_disable_if<is_const<Seq>,result_of::at<Seq&, N> >::type
-#else
- inline typename result_of::at<Seq&, N>::type
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::at<,Seq,&,N>)
     at(Seq& seq)
     {
         return result_of::at<Seq&, N>::call(seq);
@@ -82,12 +105,8 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <int N, typename Seq>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<is_const<Seq>,result_of::at_c<Seq&, N> >::type
-#else
- inline typename result_of::at_c<Seq&, N>::type
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::at_c<,Seq,&, N>)
     at_c(Seq& seq)
     {
         return fusion::at<mpl::int_<N> >(seq);

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/at_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,14 @@
 #ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_AT_KEY_HPP
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_AT_KEY_HPP
 
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#endif
 #include <boost/fusion/iterator/deref_data.hpp>
 #include <boost/fusion/algorithm/query/find_key.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -58,7 +62,11 @@
         struct at_key
             : extension::at_key_impl<typename traits::tag_of<Seq>::type>::
                 template apply<typename detail::add_lref<Seq>::type, Key>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<Seq>));
+ BOOST_FUSION_MPL_ASSERT((has_key<Seq,Key>));
+ };
     }
 
     template <typename Key, typename Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/back.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,14 @@
 #ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_BACK_HPP
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_BACK_HPP
 
-#include <boost/fusion/support/ref.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/empty.hpp>
+#endif
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/iterator/prior.hpp>
 #include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
 
 #include <boost/mpl/bool.hpp>
 
@@ -23,10 +27,12 @@
     {
         template <typename Seq>
         struct back
- : result_of::deref<typename result_of::prior<
- typename result_of::end<Seq>::type>::type
- >
- {};
+ : deref<typename prior<typename end<Seq>::type>::type>
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT_NOT((empty<Seq>));
+ };
     }
 
     template <typename Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/begin.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
 
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -36,7 +37,10 @@
         struct begin
             : extension::begin_impl<typename traits::tag_of<Seq>::type>::
                 template apply<typename detail::add_lref<Seq>::type>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
     }
 
     template <typename Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/empty.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/empty.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/empty.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,9 +8,10 @@
 #ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_EMPTY_HPP
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_EMPTY_HPP
 
-#include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/sequence/intrinsic/size.hpp>
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
+#include <boost/fusion/support/ref.hpp>
 
 #include <boost/mpl/bool.hpp>
 
@@ -25,7 +26,7 @@
         {
             template <typename SeqRef>
             struct apply
- : mpl::bool_<(result_of::size<SeqRef>::value == 0)>
+ : mpl::bool_<!result_of::size<SeqRef>::value>
             {};
         };
 
@@ -44,8 +45,11 @@
         template <typename Seq>
         struct empty
           : extension::empty_impl<typename traits::tag_of<Seq>::type>::
- template apply<typename detail::add_lref<Seq>::type>
- {};
+ template apply<typename detail::add_lref<Seq>::type>::type
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
     }
 
     template <typename Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/end.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
 
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -36,7 +37,9 @@
         struct end
           : extension::end_impl<typename traits::tag_of<Seq>::type>::
                 template apply<typename detail::add_lref<Seq>::type>
- {};
+ {
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
     }
 
     template <typename Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/front.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,9 +8,13 @@
 #ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_FRONT_HPP
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_FRONT_HPP
 
-#include <boost/fusion/support/ref.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/empty.hpp>
+#endif
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/bool.hpp>
 
@@ -22,8 +26,12 @@
     {
         template <typename Seq>
         struct front
- : result_of::deref<typename result_of::begin<Seq>::type>
- {};
+ : deref<typename begin<Seq>::type>
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ BOOST_FUSION_MPL_ASSERT_NOT((empty<Seq>));
+ };
     }
 
     template <typename Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/has_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/has_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/has_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,6 +13,7 @@
 #include <boost/fusion/iterator/equal_to.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/not.hpp>
 
@@ -53,7 +54,10 @@
         struct has_key
           : extension::has_key_impl<typename traits::tag_of<Seq>::type>::
                 template apply<typename detail::add_lref<Seq>::type, Key>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<Seq>));
+ };
     }
 
     template <typename Key, typename Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/size.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/size.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/size.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
 
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/int.hpp>
 
@@ -45,7 +46,10 @@
         struct size
           : extension::size_impl<typename traits::tag_of<Seq>::type>::
                 template apply<typename detail::add_lref<Seq>::type>::type
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
     }
 
     template <typename Seq>

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/swap.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -17,6 +17,10 @@
 # include <boost/fusion/sequence/intrinsic/front.hpp>
 # include <boost/fusion/sequence/intrinsic/back.hpp>
 #endif
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
+#include <boost/fusion/support/assert.hpp>
 
 #include <algorithm>
 
@@ -42,13 +46,19 @@
         template<typename Seq1, typename Seq2>
         struct swap
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+ BOOST_FUSION_STATIC_ASSERT((size<Seq1>::value==size<Seq2>::value));
+
             typedef void type;
         };
     }
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template<typename Seq1, typename Seq2>
- void
+ typename result_of::swap<Seq1&,Seq2&>::type
     swap(Seq1& seq1, Seq2& seq2)
     {
         for_each(zip_view<typename result_of::vector_tie<Seq1&,Seq2&>::type>(

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,10 +8,19 @@
 #ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_VALUE_AT_HPP
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_VALUE_AT_HPP
 
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/container/list/list_fwd.hpp>
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+#endif
 #include <boost/fusion/support/tag_of.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/int.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/mpl/or.hpp>
+# include <boost/type_traits/is_same.hpp>
+#endif
 
 namespace boost { namespace fusion
 {
@@ -39,12 +48,36 @@
         struct value_at
           : extension::value_at_impl<typename traits::tag_of<Seq>::type>::
                 template apply<typename detail::add_lref<Seq>::type, N>
- {};
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((
+ mpl::or_<
+ traits::is_random_access<Seq>
+ , is_same<
+ typename traits::tag_of<Seq>::type
+ , list_tag
+ >
+ >));
+ BOOST_FUSION_INDEX_CHECK(N::value,size<Seq>::value);
+ BOOST_FUSION_INDEX_CHECK(N::value,size<Seq>::value);
+ };
 
         template <typename Seq, int N>
         struct value_at_c
- : fusion::result_of::value_at<Seq,mpl::int_<N> >
- {};
+ : result_of::value_at<Seq,mpl::int_<N> >
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((
+ mpl::or_<
+ traits::is_random_access<Seq>
+ , is_same<
+ typename traits::tag_of<Seq>::type
+ , list_tag
+ >
+ >));
+ BOOST_FUSION_INDEX_CHECK(N,size<Seq>::value);
+ BOOST_FUSION_INDEX_CHECK(N,size<Seq>::value);
+ };
     }
 }}
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/intrinsic/value_at_key.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,10 +9,14 @@
 #ifndef BOOST_FUSION_SEQUENCE_INTRINSIC_VALUE_AT_KEY_HPP
 #define BOOST_FUSION_SEQUENCE_INTRINSIC_VALUE_AT_KEY_HPP
 
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#endif
 #include <boost/fusion/iterator/value_of_data.hpp>
 #include <boost/fusion/algorithm/query/find_key.hpp>
 #include <boost/fusion/support/tag_of.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/int.hpp>
 
@@ -49,11 +53,15 @@
 
     namespace result_of
     {
- template <typename Seq, typename N>
+ template <typename Seq, typename Key>
         struct value_at_key
           : extension::value_at_key_impl<typename traits::tag_of<Seq>::type>::
- template apply<typename detail::add_lref<Seq>::type, N>
- {};
+ template apply<typename detail::add_lref<Seq>::type, Key>
+ {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_associative<Seq>));
+ BOOST_FUSION_MPL_ASSERT((has_key<Seq,Key>));
+ };
     }
 }}
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/io/in.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/io/in.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/io/in.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,9 +9,11 @@
 #if !defined(BOOST_IN_05042005_0120)
 #define BOOST_IN_05042005_0120
 
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/support/assert.hpp>
+
 #include <istream>
 
-#include <boost/fusion/support/is_sequence.hpp>
 #include <boost/fusion/sequence/io/detail/in.hpp>
 
 namespace boost { namespace fusion
@@ -20,6 +22,9 @@
     inline std::istream&
     in(std::istream& is, Seq& seq)
     {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
         detail::read_sequence(is, seq);
         return is;
     }
@@ -30,10 +35,13 @@
         inline typename
             enable_if<
                fusion::traits::is_sequence<Seq>
- , std::istream&
+ , std::istream&
>::type
         operator>>(std::istream& is, Seq& seq)
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             return fusion::in(is, seq);
         }
     }

Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/io/out.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/io/out.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/io/out.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,20 +9,25 @@
 #if !defined(BOOST_OUT_05042005_0120)
 #define BOOST_OUT_05042005_0120
 
-#include <ostream>
-
-#include <boost/fusion/sequence/io/detail/out.hpp>
 #include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/utility/enable_if.hpp>
 #include <boost/mpl/or.hpp>
 
+#include <ostream>
+
+#include <boost/fusion/sequence/io/detail/out.hpp>
+
 namespace boost { namespace fusion
 {
     template <typename Seq>
     inline std::ostream&
     out(std::ostream& os, Seq& seq)
     {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
         detail::print_sequence(os, seq);
         return os;
     }
@@ -37,6 +42,9 @@
>::type
         operator<<(std::ostream& os, Seq const& seq)
         {
+ //BOOST_FUSION_MPL_ASSERT((traits_is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
             return fusion::out(os, seq);
         }
     }

Modified: sandbox/SOC/2009/fusion/boost/fusion/support.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,7 @@
 #ifndef BOOST_FUSION_SUPPORT_HPP
 #define BOOST_FUSION_SUPPORT_HPP
 
-//TODO cschmidt: is this file needed?
+//TODO cschmidt: decouple internal helper and public support classes
 
 #include <boost/fusion/support/category_of.hpp>
 #include <boost/fusion/support/is_iterator.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/assert.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/assert.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/assert.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -6,30 +6,95 @@
 #ifndef BOOST_FUSION_SUPPORT_ASSERT_HPP
 #define BOOST_FUSION_SUPPORT_ASSERT_HPP
 
-#include <boost/config.hpp>
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+# include <boost/config.hpp>
 
-#ifdef BOOST_NO_STATIC_ASSERT
-# include <boost/mpl/assert.hpp>
-# include <boost/static_assert.hpp>
-
-# define BOOST_FUSION_MPL_ASSERT(PRED,MESSAGE) BOOST_MPL_ASSERT(PRED)
-# define BOOST_FUSION_MPL_ASSERT_NOT(PRED,MESSAGE) BOOST_MPL_ASSERT_NOT(PRED)
-# define BOOST_FUSION_MPL_ASSERT_RELATION(X,REL,Y,MESSAGE)\
- BOOST_MPL_ASSERT_RELATION(X,REL,Y)
-# define BOOST_FUSION_STATIC_ASSERT(PRED,MESSAGE) BOOST_STATIC_ASSERT(PRED)
+# ifdef BOOST_NO_STATIC_ASSERT
+# include <boost/mpl/assert.hpp>
+# include <boost/static_assert.hpp>
+
+# define BOOST_FUSION_MPL_ASSERT(PRED)\
+ BOOST_MPL_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_NOT(PRED)\
+ BOOST_MPL_ASSERT_NOT(PRED)
+# define BOOST_FUSION_STATIC_ASSERT(PRED)\
+ BOOST_STATIC_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_MSG(PRED,MESSAGE)\
+ BOOST_FUSION_MPL_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_NOT_MSG(PRED,MESSAGE)\
+ BOOST_FUSION_MPL_ASSERT_NOT(PRED)
+# define BOOST_FUSION_STATIC_ASSERT_MSG(PRED,MESSAGE)\
+ BOOST_FUSION_STATIC_ASSERT(PRED)
+# else
+# include <boost/preprocessor/stringize.hpp>
+# include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ typedef char small_type;
+ struct big_type
+ {
+ char data[1024];
+ };
+
+ template<typename Pred>
+ typename mpl::if_<Pred,small_type,big_type>::type
+ evaluate_pred(void(*)(Pred));
+}}}
+
+# define BOOST_FUSION_MPL_ASSERT(PRED)\
+ static_assert(\
+ sizeof(detail::evaluate_pred(\
+ reinterpret_cast<void (*) PRED>(0)))==\
+ sizeof(detail::small_type)\
+ , "assert failed: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_MPL_ASSERT_NOT(PRED)\
+ static_assert(\
+ sizeof(detail::evaluate_pred(\
+ reinterpret_cast<void (*) PRED>(0)))==\
+ sizeof(detail::big_type)\
+ , "assert failed: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_STATIC_ASSERT(PRED)\
+ static_assert(\
+ PRED\
+ , "assert failed: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_MPL_ASSERT_MSG(PRED,MESSAGE)\
+ static_assert(\
+ sizeof(detail::evaluate_pred(\
+ reinterpret_cast<void (*) PRED>(0)))==\
+ sizeof(detail::small_type)\
+ , MESSAGE " - assert expression: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_MPL_ASSERT_NOT_MSG(PRED,MESSAGE)\
+ static_assert(\
+ sizeof(detail::evaluate_pred(\
+ reinterpret_cast<void (*) PRED>(0)))!=\
+ , sizeof(detail::small_type)\
+ , MESSAGE " - assert expression: " BOOST_PP_STRINGIZE(PRED))
+# define BOOST_FUSION_STATIC_ASSERT_MSG(PRED,MESSAGE)\
+ static_assert(\
+ PRED\
+ , MESSAGE " - assert expression: " BOOST_PP_STRINGIZE(PRED))
+# endif
 #else
-# define BOOST_FUSION_MPL_ASSERT(PRED,MESSAGE)\
- static_assert(PRED::value,MESSAGE)
-# define BOOST_FUSION_MPL_ASSERT_NOT(PRED,MESSAGE)\
- static_assert(!PRED::value,MESSAGE)
-# define BOOST_FUSION_MPL_ASSERT_RELATION(X,REL,Y,MESSAGE)\
- static_assert(X REL Y,MESSAGE)
-# define BOOST_FUSION_STATIC_ASSERT(PRED,MESSAGE)\
- static_assert(PRED,MESSAGE)
+# define BOOST_FUSION_MPL_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_NOT(PRED)
+# define BOOST_FUSION_STATIC_ASSERT(PRED)
+# define BOOST_FUSION_MPL_ASSERT_MSG(PRED,MESSAGE)
+# define BOOST_FUSION_MPL_ASSERT_NOT_MSG(PRED,MESSAGE)
+# define BOOST_FUSION_STATIC_ASSERT_MSG(PRED,MESSAGE)
 #endif
 
 #define BOOST_FUSION_INDEX_CHECK(INDEX,MAX)\
- BOOST_FUSION_MPL_ASSERT_RELATION(INDEX, >=, 0, "index out of range")\
- BOOST_FUSION_MPL_ASSERT_RELATION(INDEX, <, MAX, "index out of range")
+ BOOST_FUSION_STATIC_ASSERT_MSG(\
+ INDEX >= 0 && INDEX < MAX, "index out of range")
+
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
+//TODO ->support.hpp
+# include <boost/fusion/support/is_view.hpp>
+# include <boost/fusion/support/is_sequence.hpp>
+# include <boost/fusion/support/is_iterator.hpp>
+# include <boost/fusion/support/category_of.hpp>
+# include <boost/fusion/support/tag_of.hpp>
+#endif
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/category_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,6 +11,8 @@
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/tag_of.hpp>
 
+#include <boost/config.hpp>
+#include <boost/mpl/iterator_tags.hpp>
 #include <boost/type_traits/is_base_of.hpp>
 
 namespace boost { namespace fusion
@@ -22,17 +24,58 @@
       : incrementable_traversal_tag
     {};
 
+ //cschmidt: to ensure full compatibility between fusion and mpl iterators,
+ //the tags should inheritate the corresponding mpl tags.
+ //Fusion tags may be used as template arguments for iterator base classes
+ //(e.g. fusion::iterator_facade), therefore emulate the mpl tags (see
+ //(3.4.2/2) for more details.
     struct forward_traversal_tag
       : single_pass_traversal_tag
- {};
+ {
+ typedef mpl::forward_iterator_tag::tag tag;
+ typedef mpl::forward_iterator_tag::value_type value_type;
+ typedef forward_traversal_tag type;
+ BOOST_STATIC_CONSTANT(
+ value_type,
+ value=mpl::forward_iterator_tag::value);
+
+ operator value_type() const
+ {
+ return value;
+ }
+ };
 
     struct bidirectional_traversal_tag
       : forward_traversal_tag
- {};
+ {
+ typedef mpl::bidirectional_iterator_tag::tag tag;
+ typedef mpl::bidirectional_iterator_tag::value_type value_type;
+ typedef bidirectional_traversal_tag type;
+ BOOST_STATIC_CONSTANT(
+ value_type,
+ value=mpl::bidirectional_iterator_tag::value);
+
+ operator value_type() const
+ {
+ return value;
+ }
+ };
 
     struct random_access_traversal_tag
       : bidirectional_traversal_tag
- {};
+ {
+ typedef mpl::random_access_iterator_tag::tag tag;
+ typedef mpl::random_access_iterator_tag::value_type value_type;
+ typedef bidirectional_traversal_tag type;
+ BOOST_STATIC_CONSTANT(
+ value_type,
+ value=mpl::random_access_iterator_tag::value);
+
+ operator value_type() const
+ {
+ return value;
+ }
+ };
 
     struct associative_sequence_tag
     {};

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/deduce_sequence.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/deduce_sequence.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/deduce_sequence.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,9 +9,9 @@
 #ifndef BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP
 #define BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP
 
-#include <boost/fusion/support/deduce.hpp>
 #include <boost/fusion/container/vector/convert.hpp>
 #include <boost/fusion/view/transform_view.hpp>
+#include <boost/fusion/support/deduce.hpp>
 
 namespace boost { namespace fusion
 {

Added: sandbox/SOC/2009/fusion/boost/fusion/support/detail/workaround.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/detail/workaround.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -0,0 +1,29 @@
+// Copyright Christopher Schmidt 2009.
+// 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_DETAIL_WORKAROUND_HPP
+#define BOOST_FUSION_SUPPORT_DETAIL_WORKAROUND_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_RVALUE_REFERENCES
+# include <boost/detail/workaround.hpp>
+
+//cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
+# if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
+# include <boost/type_traits/is_const.hpp>
+# include <boost/utility/enable_if.hpp>
+
+# define BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(PRE,ARG,ARG_MODIFIER,POST)\
+ typename lazy_disable_if<\
+ is_const<ARG>\
+ , PRE ARG ARG_MODIFIER, POST\
+ >::type
+# else
+# define BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(PRE,ARG,ARG_MODIFIER,POST)\
+ typename PRE ARG ARG_MODIFIER, POST ::type
+# endif
+#endif
+
+#endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/is_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,17 +9,35 @@
 #define BOOST_FUSION_SUPPORT_IS_ITERATOR_HPP
 
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/iterator_base.hpp>
 
 #include <boost/type_traits/is_base_of.hpp>
 
+//TODO doc!!!
+
 namespace boost { namespace fusion
 {
- struct iterator_root;
+ namespace extension
+ {
+ template<typename Tag>
+ struct is_iterator_impl
+ {
+ template <typename T>
+ struct apply
+ : is_base_of<iterator_root, typename detail::identity<T>::type>
+ {};
+ };
+ }
 
- template <typename T>
- struct is_fusion_iterator
- : is_base_of<iterator_root, typename detail::identity<T>::type>
- {};
+ namespace traits
+ {
+ template <typename T>
+ struct is_iterator
+ : extension::is_iterator_impl<
+ typename fusion::traits::tag_of<T>::type
+ >::template apply<typename detail::add_lref<T>::type>::type
+ {};
+ }
 }}
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/is_sequence.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/is_sequence.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/is_sequence.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,6 +10,7 @@
 
 #include <boost/fusion/support/tag_of.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/sequence_base.hpp>
 
 #include <boost/type_traits/is_base_of.hpp>
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/ref.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -23,7 +23,6 @@
 #include <boost/type_traits/is_array.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/is_reference.hpp>
 #include <boost/type_traits/add_reference.hpp>
 #include <boost/type_traits/add_const.hpp>
 #include <boost/type_traits/add_volatile.hpp>

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/sequence_assign.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,6 +18,8 @@
         template<typename Seq>
         struct sequence_assign_type
         {
+ typedef Seq seq_type;
+
             sequence_assign_type(Seq seq)
               : seq(seq)
             {}

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/tag_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/tag_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/tag_of.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,7 +18,6 @@
 
 namespace boost { namespace fusion
 {
- struct sequence_root;
     struct mpl_sequence_tag;
     struct mpl_iterator_tag;
 

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/template.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -28,6 +28,7 @@
 # define DUMMY1(_)
 # define DUMMY2(_,__)
 
+ //cschmidt: for clarity’s sake no linebreaks
 # define VARIADIC_TEMPLATE(N) template<BOOST_PP_ENUM_PARAMS(N, typename T)>
 # define VARIADIC_TEMPLATE_WITH_DEFAULT(N) template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(N, typename T, void_)>
 # define EXPAND_TEMPLATE_ARGUMENTS(N) BOOST_PP_ENUM_PARAMS(N, T)

Modified: sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_quote.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_quote.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/variadic_templates/variadic_quote.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,9 +10,8 @@
 //BOOST_MPL_CFG_NO_HAS_XXX ?!
 
 #include <boost/mpl/has_xxx.hpp>
-#include <boost/mpl/bool.hpp>
 
-namespace boost{namespace fusion
+namespace boost { namespace fusion
 {
     namespace detail
     {
@@ -23,24 +22,25 @@
     struct variadic_quote
     {
     private:
- template<typename ConcreteType,typename/* HasType*/>
+ template<typename ConcreteType,bool/* HasType*/>
         struct apply_impl
         {
             typedef ConcreteType type;
         };
 
         template<typename ConcreteType>
- struct apply_impl<ConcreteType,mpl::true_>
+ struct apply_impl<ConcreteType,true>
           : ConcreteType
- {
- };
+ {};
 
     public:
         template<typename... Argument>
         struct apply
- : apply_impl<Type<Argument...>,detail::has_type<Type<Argument...> > >
- {
- };
+ : apply_impl<
+ Type<Argument...>
+ , detail::has_type<Type<Argument...> >::type::value
+ >
+ {};
     };
 
 }}

Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,8 +8,8 @@
 #ifndef BOOST_FUSION_TUPLE_HPP
 #define BOOST_FUSION_TUPLE_HPP
 
-#include <boost/fusion/tuple/tuple_fwd.hpp>
-#include <boost/fusion/tuple/tuple.hpp>
 #include <boost/fusion/tuple/make_tuple.hpp>
+#include <boost/fusion/tuple/tuple_fwd.hpp>
 #include <boost/fusion/tuple/tuple_tie.hpp>
+#include <boost/fusion/tuple/tuple.hpp>
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/tuple/tuple.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -17,11 +17,7 @@
 #include <boost/fusion/sequence/io.hpp>
 #include <boost/fusion/adapted/std_pair.hpp>
 #include <boost/fusion/support/ref.hpp>
-
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
-# include <boost/type_traits/is_const.hpp>
-# include <boost/utility/enable_if.hpp>
-#endif
+#include <boost/fusion/support/detail/workaround.hpp>
 
 #include <boost/fusion/container/detail/forward_ctor.hpp>
 
@@ -89,12 +85,8 @@
 
 #ifdef BOOST_NO_RVALUE_REFERENCES
     template <int N, typename Tuple>
-#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- inline typename
- lazy_disable_if<is_const<Tuple>,result_of::at_c<Tuple&, N> >::type
-#else
- inline typename result_of::at_c<Tuple&, N>::type
-#endif
+ inline BOOST_FUSION_EXPLICIT_TEMPLATE_NON_CONST_ARG_OVERLOAD(
+ result_of::at_c<,Tuple,&, N>)
     get(Tuple& tuple)
     {
         return at_c<N>(tuple);

Modified: sandbox/SOC/2009/fusion/boost/fusion/view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -11,8 +11,9 @@
 #include <boost/fusion/view/filter_view.hpp>
 #include <boost/fusion/view/iterator_range.hpp>
 #include <boost/fusion/view/joint_view.hpp>
-#include <boost/fusion/view/transform_view.hpp>
 #include <boost/fusion/view/reverse_view.hpp>
+#include <boost/fusion/view/single_view.hpp>
+#include <boost/fusion/view/transform_view.hpp>
 #include <boost/fusion/view/zip_view.hpp>
 
 #endif

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/detail/strictest_traversal.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/detail/strictest_traversal.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/detail/strictest_traversal.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,47 +9,36 @@
 #ifndef BOOST_FUSION_VIEW_DETAIL_STRICTEST_TRAVERSAL_HPP
 #define BOOST_FUSION_VIEW_DETAIL_STRICTEST_TRAVERSAL_HPP
 
-#include <boost/fusion/support/category_of.hpp>
 #include <boost/fusion/algorithm/iteration/fold.hpp>
-#include <boost/fusion/mpl.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/ref.hpp>
 
-#include <boost/mpl/or.hpp>
 #include <boost/mpl/if.hpp>
-
-#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_base_of.hpp>
 
 namespace boost { namespace fusion
 {
- struct forward_traversal_tag;
- struct bidirectional_traversal_tag;
- struct random_access_traversal_tag;
-
     namespace detail
     {
- template<typename Tag1, typename Tag2>
- struct stricter_traversal
- {
- typedef typename
- mpl::if_<
- is_convertible<Tag2,Tag1>
- , Tag1
- , Tag2
- >::type
- type;
- };
-
         struct strictest_traversal_impl
         {
             template<typename Sig>
             struct result;
 
- template<typename Self, typename Next, typename StrictestSoFar>
- struct result<Self(Next, StrictestSoFar)>
+ template<typename Self, typename NextSeq, typename StrictestSoFar>
+ struct result<Self(NextSeq, StrictestSoFar)>
             {
- typedef typename traits::category_of<Next>::type next_tag;
+ typedef typename traits::category_of<NextSeq>::type next_tag;
+ typedef typename
+ detail::identity<StrictestSoFar>::type
+ strictest_so_far_identity;
 
                 typedef typename
- stricter_traversal<StrictestSoFar,next_tag>::type
+ mpl::if_<
+ is_base_of<strictest_so_far_identity,next_tag>
+ , strictest_so_far_identity
+ , next_tag
+ >::type
                 type;
             };
         };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/filter_view/filter_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,6 +13,7 @@
 #include <boost/fusion/support/category_of.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
+#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/view/detail/view_storage.hpp>
 
 #include <boost/mpl/eval_if.hpp>
@@ -42,6 +43,9 @@
     struct filter_view
       : sequence_base<filter_view<Seq, Pred> >
     {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
         typedef detail::view_storage<Seq> storage_type;
         typedef typename storage_type::type seq_type;
         typedef Pred pred_type;

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/iterator_range/iterator_range.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,6 +12,7 @@
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/bool.hpp>
@@ -33,16 +34,15 @@
     struct iterator_range
       : sequence_base<iterator_range<First, Last> >
     {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<First>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<First>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_iterator<Last>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Last>));
+
         typedef First begin_type;
         typedef Last end_type;
 
- typedef typename
- mpl::eval_if<
- traits::is_associative<begin_type>
- , mpl::inherit2<forward_traversal_tag,associative_sequence_tag>
- , mpl::identity<forward_traversal_tag>
- >::type
- category;
+ typedef typename traits::category_of<First>::type category;
         typedef typename result_of::distance<begin_type, end_type>::type size;
         typedef iterator_range_tag fusion_tag;
         typedef fusion_sequence_tag tag;

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/joint_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/joint_view_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/joint_view/detail/joint_view_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,7 +10,6 @@
 
 #include <boost/fusion/iterator/equal_to.hpp>
 #include <boost/fusion/support/iterator_base.hpp>
-#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,6 +14,7 @@
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/view/detail/view_storage.hpp>
 
 #include <boost/mpl/eval_if.hpp>
@@ -44,6 +45,11 @@
     struct joint_view
       : sequence_base<joint_view<Seq1, Seq2> >
     {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
         typedef detail::view_storage<Seq1> storage1_type;
         typedef typename storage1_type::type seq1_type;
         typedef detail::view_storage<Seq2> storage2_type;

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/detail/reverse_view_iterator.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -10,7 +10,6 @@
 
 #include <boost/fusion/support/iterator_base.hpp>
 #include <boost/fusion/support/category_of.hpp>
-#include <boost/fusion/support/assert.hpp>
 
 namespace boost { namespace fusion
 {
@@ -25,10 +24,6 @@
         typedef reverse_view_iterator_tag fusion_tag;
         typedef typename traits::category_of<first_type>::type category;
 
- //BOOST_FUSION_STATIC_ASSERT(
- // (is_base_of<bidirectional_traversal_tag, category>::value),
- // "underlying iterator must be bidirectional");
-
         reverse_view_iterator(First const& first)
           : first(first)
         {}

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,8 +14,8 @@
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/category_of.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/view/detail/view_storage.hpp>
 
 #include <boost/mpl/eval_if.hpp>
@@ -46,6 +46,9 @@
     struct reverse_view
       : sequence_base<reverse_view<Seq> >
     {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_bidirectional<Seq>));
+
         typedef detail::view_storage<Seq> storage_type;
         typedef typename storage_type::type seq_type;
         typedef typename traits::category_of<seq_type>::type seq_category;

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/transform_view/transform_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,9 +18,9 @@
 # include <boost/fusion/container/vector/vector.hpp>
 #endif
 #include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/support/ref.hpp>
 #include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/view/detail/strictest_traversal.hpp>
 #include <boost/fusion/view/detail/view_storage.hpp>
 
@@ -57,6 +57,11 @@
     struct transform_view
       : sequence_base<transform_view<Seq1, Seq2, F,IsAssociative> >
     {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq1>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq1>));
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq2>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq2>));
+
         //BOOST_FUSION_MPL_ASSERT_RELATION(
         // result_of::size<Sequence1>,==,result_of::size<Sequence2>,
         // "both sequences must have the same length");
@@ -135,6 +140,9 @@
     struct unary_transform_view
       : sequence_base<unary_transform_view<Seq, F, void_> >
     {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+
         typedef detail::view_storage<Seq> storage_type;
         typedef typename storage_type::type seq_type;
         typedef typename traits::category_of<seq_type>::type seq_category;

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/at_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/at_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/at_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,7 +13,6 @@
 #include <boost/fusion/container/vector/convert.hpp>
 #include <boost/fusion/sequence/intrinsic/at.hpp>
 #include <boost/fusion/algorithm/transformation/transform.hpp>
-#include <boost/fusion/support/assert.hpp>
 #include <boost/fusion/support/unused.hpp>
 
 #include <boost/mpl/eval_if.hpp>
@@ -38,9 +37,7 @@
                   , mpl::identity<unused_type const&>
                   , result_of::at<SeqRef, N>
>
- {
- //BOOST_MPL_ASSERT((is_reference<SeqRef>));
- };
+ {};
 
             template<typename Seq>
             typename result<poly_at(BOOST_FUSION_R_ELSE_LREF(Seq))>::type

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/begin_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -12,11 +12,9 @@
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
 #include <boost/fusion/algorithm/transformation/transform.hpp>
 #include <boost/fusion/support/unused.hpp>
-#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/identity.hpp>
-#include <boost/type_traits/is_reference.hpp>
 #include <boost/type_traits/is_same.hpp>
 
 namespace boost { namespace fusion
@@ -35,9 +33,7 @@
                   , mpl::identity<unused_type const&>
                   , result_of::begin<SeqRef>
>
- {
- BOOST_MPL_ASSERT((detail::is_lrref<SeqRef>));
- };
+ {};
 
             template<typename Seq>
             typename result<poly_begin(BOOST_FUSION_R_ELSE_LREF(Seq))>::type

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/distance_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/distance_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/distance_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -14,7 +14,6 @@
 #include <boost/fusion/iterator/distance.hpp>
 #include <boost/fusion/algorithm/query/find_if.hpp>
 #include <boost/fusion/support/category_of.hpp>
-#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/placeholders.hpp>
@@ -30,19 +29,16 @@
         struct best_distance
         {
             typedef typename
- result_of::find_if<
- typename SearchIt::iterators
- , is_same<
- traits::category_of<mpl::_1>
- , random_access_iterator_tag
- >
- >
- finder;
-
- //BOOST_MPL_ASSERT_NOT((is_same<typename finder::type, result_of::end<typename SearchIt::iterators> >));
-
- typedef typename
- result_of::distance<FoundIt, typename finder::type>::type
+ result_of::distance<
+ FoundIt
+ , typename result_of::find_if<
+ typename SearchIt::iterators
+ , is_same<
+ traits::category_of<mpl::_1>
+ , random_access_iterator_tag
+ >
+ >::type
+ >::type
             type;
         };
 
@@ -62,17 +58,17 @@
                     typename It1::iterators
                   , is_same<traits::category_of<mpl::_1>
                   , random_access_iterator_tag>
- >
- finder;
+ >::type
+ found_it;
 
             typedef typename
                 mpl::eval_if<
                     is_same<
- typename finder::type
+ found_it
                       , typename result_of::end<typename It1::iterators>::type
>
                   , detail::default_distance<It1, It2>
- , detail::best_distance<typename finder::type, It2>
+ , detail::best_distance<found_it, It2>
>::type
             type;
         };

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/detail/end_impl.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -15,12 +15,10 @@
 #include <boost/fusion/sequence/intrinsic/front.hpp>
 #include <boost/fusion/iterator/advance.hpp>
 #include <boost/fusion/algorithm/transformation/transform.hpp>
-#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/min.hpp>
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/identity.hpp>
-#include <boost/type_traits/is_reference.hpp>
 #include <boost/type_traits/is_same.hpp>
 
 namespace boost { namespace fusion
@@ -48,9 +46,7 @@
                   , mpl::identity<unused_type const&>
                   , get_endpoint<SeqRef, M>
>
- {
- BOOST_MPL_ASSERT((detail::is_lrref<SeqRef>));
- };
+ {};
 
             template<typename Seq>
             typename result<endpoints(BOOST_FUSION_R_ELSE_LREF(Seq))>::type

Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -18,6 +18,7 @@
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/unused.hpp>
 #include <boost/fusion/support/ref.hpp>
+#include <boost/fusion/support/assert.hpp>
 
 #include <boost/mpl/not.hpp>
 #include <boost/mpl/placeholders.hpp>
@@ -28,8 +29,7 @@
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/eval_if.hpp>
 
-#include <boost/integer_traits.hpp>
-#include <boost/type_traits/is_reference.hpp>
+//#include <boost/integer_traits.hpp>
 
 #include <boost/fusion/view/detail/strictest_traversal.hpp>
 #include <boost/fusion/view/zip_view/detail/zip_view_fwd.hpp>
@@ -52,15 +52,31 @@
 
     namespace detail
     {
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERTS
         template<typename Seqs>
- struct all_references
- : fusion::result_of::equal_to<
- typename fusion::result_of::find_if<
- Seqs, mpl::not_<is_lrref<mpl::_1> >
- >::type
- , typename fusion::result_of::end<Seqs>::type
- >
- {};
+ struct all_forward_seqs
+ : mpl::true_
+ {
+ BOOST_FUSION_MPL_ASSERT((
+ result_of::equal_to<
+ typename fusion::result_of::find_if<
+ Seqs
+ , mpl::not_<
+ traits::is_forward/*traits::is_sequence*/<mpl::_1>
+ >
+ >::type
+ , typename fusion::result_of::end<Seqs>::type
+ >));
+ BOOST_FUSION_MPL_ASSERT((
+ result_of::equal_to<
+ typename fusion::result_of::find_if<
+ Seqs
+ , mpl::not_<detail::is_lrref<mpl::_1> >
+ >::type
+ , typename fusion::result_of::end<Seqs>::type
+ >));
+ };
+#endif
 
         struct seq_size
         {
@@ -71,13 +87,13 @@
             struct result<Self(Seq)>
             {
                 typedef typename
- mpl::eval_if<
- traits::is_forward<Seq>
- , result_of::size<Seq>
- , mpl::identity<
- mpl::int_<integer_traits<int>::const_max>
- >
- >::type
+ //mpl::eval_if<
+ // traits::is_forward<Seq>
+ /* ,*/ result_of::size<Seq>
+ // , mpl::identity<
+ // mpl::int_<integer_traits<int>::const_max>
+ // >
+ /*>*/::type
                 type;
             };
         };
@@ -93,8 +109,7 @@
                     typename detail::remove_reference<MinSize>::type,
                     typename detail::remove_reference<SeqSize>::type
>
- {
- };
+ {};
         };
 
         template<typename Seqs>
@@ -123,10 +138,14 @@
     struct zip_view
       : sequence_base< zip_view<Seqs> >
     {
+ //BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seqs>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seqs>));
+
         typedef typename
             result_of::remove<Seqs, unused_type const&>::type
         real_seqs;
- BOOST_MPL_ASSERT((detail::all_references<Seqs>));
+
+ BOOST_FUSION_MPL_ASSERT((detail::all_forward_seqs<real_seqs>));
 
         typedef typename
             fusion::result_of::as_vector<Seqs>::type

Modified: sandbox/SOC/2009/fusion/build.bat
==============================================================================
--- sandbox/SOC/2009/fusion/build.bat (original)
+++ sandbox/SOC/2009/fusion/build.bat 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -16,7 +16,7 @@
         call :msvc
     ) else (
         if "%1" == "" (
- call :msvc
+ call :gcc
         ) else (
             echo Unknown toolset '%1'
             goto :eof

Modified: sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/example/test/main.cpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -13,6 +13,8 @@
 #include <boost/fusion/container.hpp>
 #include <boost/fusion/view.hpp>
 #include <boost/fusion/adapted.hpp>
+#include <boost/fusion/tuple.hpp>
+#include <boost/fusion/support.hpp>
 
 #include <boost/mpl/placeholders.hpp>
 
@@ -113,6 +115,9 @@
     }
 };
 
+template<class>
+class C;
+
 int main()
 {
     {
@@ -152,3 +157,45 @@
     }
 }
 
+/*#include <boost/mpl/transform.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/equal.hpp>
+
+#include <utility>
+
+namespace mpl=boost::mpl;
+
+struct my_make_pair {
+ template<typename T1, typename T2>
+ struct apply {
+ typedef std::pair<T1,T2> type;
+ };
+};
+
+
+
+int main(int argc, char *argv[])
+{
+ {
+ typedef mpl::vector<int,long> seq1;
+ typedef mpl::vector<float,double> seq2;
+ typedef mpl::vector<std::pair<int,float>,std::pair<long,double> > pairs;
+
+ typedef mpl::transform<seq1,seq2,my_make_pair>::type result;
+
+ static_assert( mpl::equal<result,pairs>::type::value, "");
+ }
+
+ typedef fusion::vector<int,long> seq1;
+
+ typedef fusion::vector<float,double> seq2;
+ typedef fusion::vector<std::pair<int,float>,std::pair<long,double> >
+pairs;
+
+ typedef mpl::transform<seq1,seq2,my_make_pair>::type result;
+
+ static_assert( mpl::equal<result,pairs>::type::value, "");
+ mpl::push_back<fusion::vector<>,int>::type z;
+
+ return 0;
+}*/

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 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -8,7 +8,7 @@
 
 #define FUSION_SEQUENCE list
 #define FUSION_NO_RANDOM_ACCESS_SEQUENCE
-#define FUSION_TRAVERSAL_TAG forward_traversal_tag
+#define FUSION_TRAVERSAL_TAG bidirectional_traversal_tag
 #include "./iterator.hpp"
 
 int

Modified: sandbox/SOC/2009/fusion/libs/fusion/test/sequence/zip_view2.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/sequence/zip_view2.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/sequence/zip_view2.cpp 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -49,15 +49,12 @@
         seqs_type seqs(iv, cv, cl);
         view v(seqs);
 
- BOOST_TEST(at_c<0>(v) == make_vector(1, 'a', 'y'));
- BOOST_TEST(at_c<1>(v) == make_vector(2, 'b', 'z'));
         BOOST_TEST(front(v) == make_vector(1, 'a', 'y'));
         BOOST_TEST(*next(begin(v)) == make_vector(2, 'b', 'z'));
         BOOST_TEST(advance_c<2>(begin(v)) == end(v));
         BOOST_TEST(distance(begin(v), end(v)) == 2);
         BOOST_STATIC_ASSERT((boost::fusion::result_of::distance<boost::fusion::result_of::begin<view>::type, boost::fusion::result_of::end<view>::type>::value == 2));
 
- BOOST_MPL_ASSERT((boost::is_same<boost::fusion::result_of::value_at_c<view,0>::type, vector<int,char,char> >));
         BOOST_MPL_ASSERT((boost::is_same<boost::fusion::result_of::value_of<boost::fusion::result_of::begin<view>::type>::type, vector<int,char,char> >));
     }
     return boost::report_errors();

Modified: sandbox/SOC/2009/fusion/project-root.jam
==============================================================================
--- sandbox/SOC/2009/fusion/project-root.jam (original)
+++ sandbox/SOC/2009/fusion/project-root.jam 2009-08-12 17:36:29 EDT (Wed, 12 Aug 2009)
@@ -9,12 +9,13 @@
 project
     : requirements <include>.
                    <include>$(BOOST_INCLUDES_PATH)
-# <toolset>gcc:<cxxflags>-std=c++0x
+ <define>BOOST_FUSION_ENABLE_STATIC_ASSERTS
+ <toolset>gcc:<cxxflags>-std=c++0x
     : build-dir ../bin
     : default-build debug <link>shared <runtime-link>shared <threading>multi
     ;
 
-#build-project libs/fusion/example/test ;
+build-project libs/fusion/example/test ;
 
 #build-project libs/fusion/doc ;
 #build-project libs/fusion/example/extension ;


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk