Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r81061 - in branches/release/boost/fusion: . adapted/struct/detail algorithm/iteration/detail/preprocessed algorithm/query/detail container/deque container/deque/detail container/vector container/vector/detail functional/invocation iterator sequence/intrinsic
From: joel_at_[hidden]
Date: 2012-10-24 22:06:25


Author: djowel
Date: 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
New Revision: 81061
URL: http://svn.boost.org/trac/boost/changeset/81061

Log:
Merge from trunk
Added:
   branches/release/boost/fusion/container/deque/detail/pp_deque.hpp
      - copied unchanged from r80406, /trunk/boost/fusion/container/deque/detail/pp_deque.hpp
   branches/release/boost/fusion/container/deque/detail/pp_deque_fwd.hpp
      - copied unchanged from r80406, /trunk/boost/fusion/container/deque/detail/pp_deque_fwd.hpp
   branches/release/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp
      - copied unchanged from r80406, /trunk/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp
   branches/release/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp
      - copied, changed from r80406, /trunk/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp
Removed:
   branches/release/boost/fusion/container/deque/detail/cpp03_deque.hpp
   branches/release/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp
   branches/release/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp
   branches/release/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp
Properties modified:
   branches/release/boost/fusion/ (props changed)
Text files modified:
   branches/release/boost/fusion/adapted/struct/detail/define_struct_inline.hpp | 239 +++++++++++++++++++++++----------------
   branches/release/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp | 2
   branches/release/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp | 2
   branches/release/boost/fusion/algorithm/query/detail/any.hpp | 2
   branches/release/boost/fusion/container/deque/deque.hpp | 87 ++++++++++++--
   branches/release/boost/fusion/container/deque/deque_fwd.hpp | 6
   branches/release/boost/fusion/container/deque/detail/deque_forward_ctor.hpp | 14 ++
   branches/release/boost/fusion/container/deque/detail/deque_initial_size.hpp | 2
   branches/release/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp | 20 +++
   branches/release/boost/fusion/container/deque/detail/keyed_element.hpp | 48 +++++++
   branches/release/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp | 9
   branches/release/boost/fusion/container/deque/limits.hpp | 2
   branches/release/boost/fusion/container/vector/detail/vector_forward_ctor.hpp | 11 +
   branches/release/boost/fusion/container/vector/detail/vector_n.hpp | 79 ++++++++++---
   branches/release/boost/fusion/container/vector/vector.hpp | 22 +++
   branches/release/boost/fusion/functional/invocation/invoke.hpp | 83 ++++++++++++-
   branches/release/boost/fusion/iterator/iterator_adapter.hpp | 4
   branches/release/boost/fusion/sequence/intrinsic/has_key.hpp | 2
   18 files changed, 471 insertions(+), 163 deletions(-)

Modified: branches/release/boost/fusion/adapted/struct/detail/define_struct_inline.hpp
==============================================================================
--- branches/release/boost/fusion/adapted/struct/detail/define_struct_inline.hpp (original)
+++ branches/release/boost/fusion/adapted/struct/detail/define_struct_inline.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -20,6 +20,7 @@
 #include <boost/mpl/if.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/preprocessor/comma_if.hpp>
+#include <boost/preprocessor/facilities/is_empty.hpp>
 #include <boost/preprocessor/repeat.hpp>
 #include <boost/preprocessor/seq/for_each_i.hpp>
 #include <boost/preprocessor/seq/size.hpp>
@@ -61,15 +62,20 @@
     BOOST_PP_COMMA_IF(N) \
     BOOST_FUSION_MAKE_INIT_LIST_ENTRY_I(BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE))
 
+#define BOOST_FUSION_ITERATOR_NAME(NAME) \
+ BOOST_PP_CAT(boost_fusion_detail_, BOOST_PP_CAT(NAME, _iterator))
+
 // Note: all template parameter names need to be uglified, otherwise they might
 // shadow a template parameter of the struct when used with
 // BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE
 
 #define BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS(Z, N, NAME) \
- template <typename boost_fusion_uglified_Sq> \
- struct value_of<NAME##_iterator<boost_fusion_uglified_Sq, N> > \
+ template <typename boost_fusion_detail_Sq> \
+ struct value_of< \
+ BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, N> \
+ > \
         : boost::mpl::identity< \
- typename boost_fusion_uglified_Sq::t##N##_type \
+ typename boost_fusion_detail_Sq::t##N##_type \
> \
     { \
     };
@@ -77,10 +83,10 @@
 #define BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
     SPEC_TYPE, CALL_ARG_TYPE, TYPE_QUAL, ATTRIBUTE, N) \
                                                                                 \
- template <typename boost_fusion_uglified_Sq> \
+ template <typename boost_fusion_detail_Sq> \
     struct deref<SPEC_TYPE, N> > \
     { \
- typedef typename boost_fusion_uglified_Sq::t##N##_type TYPE_QUAL& type; \
+ typedef typename boost_fusion_detail_Sq::t##N##_type TYPE_QUAL& type; \
         static type call(CALL_ARG_TYPE, N> const& iter) \
         { \
             return iter.seq_.BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \
@@ -89,48 +95,48 @@
 
 #define BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS(R, NAME, N, ATTRIBUTE) \
     BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
- BOOST_PP_CAT(NAME, _iterator)<boost_fusion_uglified_Sq, \
- BOOST_PP_CAT(NAME, _iterator)<boost_fusion_uglified_Sq, \
+ BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, \
+ BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, \
         , \
         ATTRIBUTE, \
         N) \
     BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
- BOOST_PP_CAT(NAME, _iterator)<const boost_fusion_uglified_Sq, \
- BOOST_PP_CAT(NAME, _iterator)<const boost_fusion_uglified_Sq, \
+ BOOST_FUSION_ITERATOR_NAME(NAME)<const boost_fusion_detail_Sq, \
+ BOOST_FUSION_ITERATOR_NAME(NAME)<const boost_fusion_detail_Sq, \
         const, \
         ATTRIBUTE, \
         N) \
     BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
- const BOOST_PP_CAT(NAME, _iterator)<boost_fusion_uglified_Sq, \
- BOOST_PP_CAT(NAME, _iterator)<boost_fusion_uglified_Sq, \
+ const BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, \
+ BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, \
         , \
         ATTRIBUTE, \
         N) \
     BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
- const BOOST_PP_CAT(NAME, _iterator)<const boost_fusion_uglified_Sq, \
- BOOST_PP_CAT(NAME, _iterator)<const boost_fusion_uglified_Sq, \
+ const BOOST_FUSION_ITERATOR_NAME(NAME)<const boost_fusion_detail_Sq, \
+ BOOST_FUSION_ITERATOR_NAME(NAME)<const boost_fusion_detail_Sq, \
         const, \
         ATTRIBUTE, \
         N) \
 
 #define BOOST_FUSION_MAKE_VALUE_AT_SPECS(Z, N, DATA) \
- template <typename boost_fusion_uglified_Sq> \
- struct value_at<boost_fusion_uglified_Sq, boost::mpl::int_<N> > \
+ template <typename boost_fusion_detail_Sq> \
+ struct value_at<boost_fusion_detail_Sq, boost::mpl::int_<N> > \
     { \
- typedef typename boost_fusion_uglified_Sq::t##N##_type type; \
+ typedef typename boost_fusion_detail_Sq::t##N##_type type; \
     };
 
 #define BOOST_FUSION_MAKE_AT_SPECS(R, DATA, N, ATTRIBUTE) \
- template <typename boost_fusion_uglified_Sq> \
- struct at<boost_fusion_uglified_Sq, boost::mpl::int_<N> > \
+ template <typename boost_fusion_detail_Sq> \
+ struct at<boost_fusion_detail_Sq, boost::mpl::int_<N> > \
     { \
         typedef typename boost::mpl::if_< \
- boost::is_const<boost_fusion_uglified_Sq>, \
- typename boost_fusion_uglified_Sq::t##N##_type const&, \
- typename boost_fusion_uglified_Sq::t##N##_type& \
+ boost::is_const<boost_fusion_detail_Sq>, \
+ typename boost_fusion_detail_Sq::t##N##_type const&, \
+ typename boost_fusion_detail_Sq::t##N##_type& \
>::type type; \
                                                                                 \
- static type call(boost_fusion_uglified_Sq& sq) \
+ static type call(boost_fusion_detail_Sq& sq) \
         { \
             return sq. BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \
         } \
@@ -142,7 +148,11 @@
 #define BOOST_FUSION_MAKE_DATA_MEMBER(R, DATA, N, ATTRIBUTE) \
     BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE) BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE);
 
+// Note: We can't nest the iterator inside the struct because we run into
+// a MSVC10 bug involving partial specializations of nested templates.
+
 #define BOOST_FUSION_DEFINE_STRUCT_INLINE_IMPL(NAME, ATTRIBUTES) \
+ BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \
     struct NAME : boost::fusion::sequence_facade< \
                       NAME, \
                       boost::fusion::random_access_traversal_tag \
@@ -154,6 +164,8 @@
 #define BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE_IMPL( \
     TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES) \
                                                                                 \
+ BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \
+ \
     template < \
         BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL( \
             (0)TEMPLATE_PARAMS_SEQ) \
@@ -173,176 +185,201 @@
         NAME, \
         BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END))
 
+// Note: can't compute BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ) directly because
+// ATTRIBUTES_SEQ may be empty and calling BOOST_PP_SEQ_SIZE on an empty
+// sequence produces warnings on MSVC.
 #define BOOST_FUSION_DEFINE_STRUCT_MEMBERS_IMPL(NAME, ATTRIBUTES_SEQ) \
     BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \
         NAME, \
         ATTRIBUTES_SEQ, \
- BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ))
+ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE((0)ATTRIBUTES_SEQ)))
 
-#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \
+#define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \
+ BOOST_FUSION_DEFINE_STRUCT_ITERATOR_IMPL( \
+ NAME, \
+ BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END))
+
+#define BOOST_FUSION_DEFINE_STRUCT_ITERATOR_IMPL(NAME, ATTRIBUTES_SEQ) \
+ BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \
+ NAME, \
+ ATTRIBUTES_SEQ, \
+ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE((0)ATTRIBUTES_SEQ)))
+
+#define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \
     NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \
                                                                                 \
- NAME() \
- BOOST_PP_IF( \
- BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \
- BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \
- BOOST_FUSION_IGNORE_1) \
- (ATTRIBUTES_SEQ) \
- { \
- } \
- \
- BOOST_PP_IF( \
- BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \
- BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \
- BOOST_FUSION_IGNORE_2) \
- (NAME, ATTRIBUTES_SEQ) \
- \
- template <typename boost_fusion_uglified_Seq> \
- NAME(const boost_fusion_uglified_Seq& rhs) \
- { \
- boost::fusion::copy(rhs, *this); \
- } \
- \
- template <typename boost_fusion_uglified_Seq> \
- NAME& operator=(const boost_fusion_uglified_Seq& rhs) \
- { \
- boost::fusion::copy(rhs, *this); \
- return *this; \
- } \
- \
- template <typename boost_fusion_uglified_Seq, int N> \
- struct NAME##_iterator \
+ template <typename boost_fusion_detail_Seq, int N> \
+ struct BOOST_FUSION_ITERATOR_NAME(NAME) \
         : boost::fusion::iterator_facade< \
- NAME##_iterator<boost_fusion_uglified_Seq, N>, \
+ BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Seq, N>, \
               boost::fusion::random_access_traversal_tag \
> \
     { \
         typedef boost::mpl::int_<N> index; \
- typedef boost_fusion_uglified_Seq sequence_type; \
+ typedef boost_fusion_detail_Seq sequence_type; \
                                                                                 \
- NAME##_iterator(boost_fusion_uglified_Seq& seq) : seq_(seq) {} \
+ BOOST_FUSION_ITERATOR_NAME(NAME)(boost_fusion_detail_Seq& seq) \
+ : seq_(seq) {} \
                                                                                 \
- boost_fusion_uglified_Seq& seq_; \
+ boost_fusion_detail_Seq& seq_; \
                                                                                 \
- template <typename boost_fusion_uglified_T> struct value_of; \
+ template <typename boost_fusion_detail_T> struct value_of; \
         BOOST_PP_REPEAT( \
             ATTRIBUTES_SEQ_SIZE, \
             BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS, \
             NAME) \
                                                                                 \
- template <typename boost_fusion_uglified_T> struct deref; \
+ template <typename boost_fusion_detail_T> struct deref; \
         BOOST_PP_SEQ_FOR_EACH_I( \
             BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS, \
             NAME, \
             ATTRIBUTES_SEQ) \
                                                                                 \
- template <typename boost_fusion_uglified_It> \
+ template <typename boost_fusion_detail_It> \
         struct next \
         { \
- typedef NAME##_iterator< \
- typename boost_fusion_uglified_It::sequence_type, \
- boost_fusion_uglified_It::index::value + 1 \
+ typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \
+ typename boost_fusion_detail_It::sequence_type, \
+ boost_fusion_detail_It::index::value + 1 \
> type; \
                                                                                 \
- static type call(boost_fusion_uglified_It const& it) \
+ static type call(boost_fusion_detail_It const& it) \
             { \
                 return type(it.seq_); \
             } \
         }; \
                                                                                 \
- template <typename boost_fusion_uglified_It> \
+ template <typename boost_fusion_detail_It> \
         struct prior \
         { \
- typedef NAME##_iterator< \
- typename boost_fusion_uglified_It::sequence_type, \
- boost_fusion_uglified_It::index::value - 1 \
+ typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \
+ typename boost_fusion_detail_It::sequence_type, \
+ boost_fusion_detail_It::index::value - 1 \
> type; \
                                                                                 \
- static type call(boost_fusion_uglified_It const& it) \
+ static type call(boost_fusion_detail_It const& it) \
             { \
                 return type(it.seq_); \
             } \
         }; \
                                                                                 \
         template < \
- typename boost_fusion_uglified_It1, \
- typename boost_fusion_uglified_It2 \
+ typename boost_fusion_detail_It1, \
+ typename boost_fusion_detail_It2 \
> \
         struct distance \
         { \
             typedef typename boost::mpl::minus< \
- typename boost_fusion_uglified_It2::index, \
- typename boost_fusion_uglified_It1::index \
+ typename boost_fusion_detail_It2::index, \
+ typename boost_fusion_detail_It1::index \
>::type type; \
                                                                                 \
- static type call(boost_fusion_uglified_It1 const& it1, \
- boost_fusion_uglified_It2 const& it2) \
+ static type call(boost_fusion_detail_It1 const& it1, \
+ boost_fusion_detail_It2 const& it2) \
             { \
                 return type(); \
             } \
         }; \
                                                                                 \
         template < \
- typename boost_fusion_uglified_It, \
- typename boost_fusion_uglified_M \
+ typename boost_fusion_detail_It, \
+ typename boost_fusion_detail_M \
> \
         struct advance \
         { \
- typedef NAME##_iterator< \
- typename boost_fusion_uglified_It::sequence_type, \
- boost_fusion_uglified_It::index::value \
- + boost_fusion_uglified_M::value \
+ typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \
+ typename boost_fusion_detail_It::sequence_type, \
+ boost_fusion_detail_It::index::value \
+ + boost_fusion_detail_M::value \
> type; \
                                                                                 \
- static type call(boost_fusion_uglified_It const& it) \
+ static type call(boost_fusion_detail_It const& it) \
             { \
                 return type(it.seq_); \
             } \
         }; \
- }; \
+ };
+
+
+#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \
+ NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \
+ \
+ /* Note: second BOOST_PP_IF is necessary to avoid MSVC warning when */ \
+ /* calling BOOST_FUSION_IGNORE_1 with no arguments. */ \
+ NAME() \
+ BOOST_PP_IF( \
+ ATTRIBUTES_SEQ_SIZE, \
+ BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \
+ BOOST_FUSION_IGNORE_1) \
+ (BOOST_PP_IF( \
+ ATTRIBUTES_SEQ_SIZE, \
+ ATTRIBUTES_SEQ, \
+ 0)) \
+ { \
+ } \
+ \
+ BOOST_PP_IF( \
+ ATTRIBUTES_SEQ_SIZE, \
+ BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \
+ BOOST_FUSION_IGNORE_2) \
+ (NAME, ATTRIBUTES_SEQ) \
+ \
+ template <typename boost_fusion_detail_Seq> \
+ NAME(const boost_fusion_detail_Seq& rhs) \
+ { \
+ boost::fusion::copy(rhs, *this); \
+ } \
+ \
+ template <typename boost_fusion_detail_Seq> \
+ NAME& operator=(const boost_fusion_detail_Seq& rhs) \
+ { \
+ boost::fusion::copy(rhs, *this); \
+ return *this; \
+ } \
                                                                                 \
- template <typename boost_fusion_uglified_Sq> \
+ template <typename boost_fusion_detail_Sq> \
     struct begin \
     { \
- typedef NAME##_iterator<boost_fusion_uglified_Sq, 0> type; \
+ typedef BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, 0> \
+ type; \
                                                                                 \
- static type call(boost_fusion_uglified_Sq& sq) \
+ static type call(boost_fusion_detail_Sq& sq) \
         { \
             return type(sq); \
         } \
     }; \
                                                                                 \
- template <typename boost_fusion_uglified_Sq> \
+ template <typename boost_fusion_detail_Sq> \
     struct end \
     { \
- typedef NAME##_iterator< \
- boost_fusion_uglified_Sq, \
+ typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \
+ boost_fusion_detail_Sq, \
             ATTRIBUTES_SEQ_SIZE \
> type; \
                                                                                 \
- static type call(boost_fusion_uglified_Sq& sq) \
+ static type call(boost_fusion_detail_Sq& sq) \
         { \
             return type(sq); \
         } \
     }; \
                                                                                 \
- template <typename boost_fusion_uglified_Sq> \
+ template <typename boost_fusion_detail_Sq> \
     struct size : boost::mpl::int_<ATTRIBUTES_SEQ_SIZE> \
     { \
     }; \
                                                                                 \
- template <typename boost_fusion_uglified_Sq> \
+ template <typename boost_fusion_detail_Sq> \
     struct empty : boost::mpl::bool_<ATTRIBUTES_SEQ_SIZE == 0> \
     { \
     }; \
                                                                                 \
     template < \
- typename boost_fusion_uglified_Sq, \
- typename boost_fusion_uglified_N \
+ typename boost_fusion_detail_Sq, \
+ typename boost_fusion_detail_N \
> \
     struct value_at : value_at< \
- boost_fusion_uglified_Sq, \
- boost::mpl::int_<boost_fusion_uglified_N::value> \
+ boost_fusion_detail_Sq, \
+ boost::mpl::int_<boost_fusion_detail_N::value> \
> \
     { \
     }; \
@@ -353,12 +390,12 @@
         ~) \
                                                                                 \
     template < \
- typename boost_fusion_uglified_Sq, \
- typename boost_fusion_uglified_N \
+ typename boost_fusion_detail_Sq, \
+ typename boost_fusion_detail_N \
> \
     struct at : at< \
- boost_fusion_uglified_Sq, \
- boost::mpl::int_<boost_fusion_uglified_N::value> \
+ boost_fusion_detail_Sq, \
+ boost::mpl::int_<boost_fusion_detail_N::value> \
> \
     { \
     }; \

Modified: branches/release/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp
==============================================================================
--- branches/release/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp (original)
+++ branches/release/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -116,7 +116,7 @@
         {
             template<typename State, typename It0, typename F>
             static Result
- call(State const& state,It0 const& it0, F)
+ call(State const& state,It0 const&, F)
             {
                 return static_cast<Result>(state);
             }

Modified: branches/release/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp
==============================================================================
--- branches/release/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp (original)
+++ branches/release/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -115,7 +115,7 @@
         {
             template<typename State, typename It0, typename F>
             static Result
- call(State const& state,It0 const& it0, F)
+ call(State const& state,It0 const&, F)
             {
                 return static_cast<Result>(state);
             }

Modified: branches/release/boost/fusion/algorithm/query/detail/any.hpp
==============================================================================
--- branches/release/boost/fusion/algorithm/query/detail/any.hpp (original)
+++ branches/release/boost/fusion/algorithm/query/detail/any.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -109,7 +109,7 @@
     struct unrolled_any<0>
     {
         template <typename It, typename F>
- static bool call(It const& it, F f)
+ static bool call(It const&, F)
         {
             return false;
         }

Modified: branches/release/boost/fusion/container/deque/deque.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/deque.hpp (original)
+++ branches/release/boost/fusion/container/deque/deque.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -11,24 +11,23 @@
 #include <boost/config.hpp>
 
 ///////////////////////////////////////////////////////////////////////////////
-// With no decltype and variadics, we will use the C++03 version
+// With variadics, we will use the PP version version
 ///////////////////////////////////////////////////////////////////////////////
-#if (defined(BOOST_NO_DECLTYPE) \
- || defined(BOOST_NO_VARIADIC_TEMPLATES) \
- || defined(BOOST_NO_RVALUE_REFERENCES))
-# include <boost/fusion/container/deque/detail/cpp03_deque.hpp>
+#if defined(BOOST_NO_VARIADIC_TEMPLATES)
+# include <boost/fusion/container/deque/detail/pp_deque.hpp>
 #else
-# if !defined(BOOST_FUSION_HAS_CPP11_DEQUE)
-# define BOOST_FUSION_HAS_CPP11_DEQUE
+# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+# define BOOST_FUSION_HAS_VARIADIC_DEQUE
 # endif
 
 ///////////////////////////////////////////////////////////////////////////////
-// C++11 interface
+// C++11 variadic interface
 ///////////////////////////////////////////////////////////////////////////////
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
 #include <boost/fusion/container/deque/detail/keyed_element.hpp>
-#include <boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp>
+#include <boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp>
 #include <boost/fusion/container/deque/deque_fwd.hpp>
 #include <boost/fusion/container/deque/detail/value_at_impl.hpp>
 #include <boost/fusion/container/deque/detail/at_impl.hpp>
@@ -36,8 +35,10 @@
 #include <boost/fusion/container/deque/detail/end_impl.hpp>
 #include <boost/fusion/container/deque/detail/is_sequence_impl.hpp>
 #include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/empty.hpp>
 
 #include <boost/mpl/int.hpp>
+#include <boost/mpl/and.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 
@@ -48,6 +49,22 @@
     template <typename ...Elements>
     struct deque : detail::nil_keyed_element
     {
+ typedef deque_tag fusion_tag;
+ typedef bidirectional_traversal_tag category;
+ typedef mpl::int_<0> size;
+ typedef mpl::int_<0> next_up;
+ typedef mpl::int_<0> next_down;
+ typedef mpl::false_ is_view;
+
+ template <typename Sequence>
+ deque(Sequence const&,
+ typename enable_if<
+ mpl::and_<
+ traits::is_sequence<Sequence>
+ , result_of::empty<Sequence>>>::type* /*dummy*/ = 0)
+ {}
+
+ deque() {}
     };
 
     template <typename Head, typename ...Tail>
@@ -60,7 +77,7 @@
         typedef typename detail::deque_keyed_values<Head, Tail...>::type base;
         typedef mpl::int_<(sizeof ...(Tail) + 1)> size;
         typedef mpl::int_<size::value> next_up;
- typedef mpl::int_<mpl::int_<((size::value == 0) ? 0 : -1)>::type::value> next_down;
+ typedef mpl::int_<((size::value == 0) ? 0 : -1)> next_down;
         typedef mpl::false_ is_view;
 
         deque()
@@ -71,11 +88,45 @@
           : base(seq)
         {}
 
- explicit deque(typename detail::call_param<Head>::type head
- , typename detail::call_param<Tail>::type... tail)
- : base(detail::deque_keyed_values<Head, Tail...>::call(head, tail...))
+ template <typename ...Elements>
+ deque(deque<Elements...>& seq)
+ : base(seq)
         {}
 
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ template <typename ...Elements>
+ deque(deque<Elements...>&& seq)
+ : base(std::forward<deque<Elements...>>(seq))
+ {}
+#endif
+
+ deque(deque const& seq)
+ : base(seq)
+ {}
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ deque(deque&& seq)
+ : base(std::forward<deque>(seq))
+ {}
+#endif
+
+ explicit deque(Head const& head, Tail const&... tail)
+ : base(detail::deque_keyed_values<Head, Tail...>::construct(head, tail...))
+ {}
+
+ template <typename Head_, typename ...Tail_>
+ explicit deque(Head_ const& head, Tail_ const&... tail)
+ : base(detail::deque_keyed_values<Head_, Tail_...>::construct(head, tail...))
+ {}
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ template <typename Head_, typename ...Tail_>
+ explicit deque(Head_&& head, Tail_&&... tail)
+ : base(detail::deque_keyed_values<Head, Tail...>
+ ::forward_(std::forward<Head_>(head), std::forward<Tail_>(tail)...))
+ {}
+#endif
+
         template <typename Sequence>
         explicit deque(Sequence const& seq
           , typename disable_if<is_convertible<Sequence, Head> >::type* /*dummy*/ = 0)
@@ -95,6 +146,16 @@
             base::operator=(rhs);
             return *this;
         }
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ template <typename T>
+ deque& operator=(T&& rhs)
+ {
+ base::operator=(std::forward<T>(rhs));
+ return *this;
+ }
+#endif
+
     };
 }}
 

Modified: branches/release/boost/fusion/container/deque/deque_fwd.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/deque_fwd.hpp (original)
+++ branches/release/boost/fusion/container/deque/deque_fwd.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -16,10 +16,10 @@
 #if (defined(BOOST_NO_DECLTYPE) \
   || defined(BOOST_NO_VARIADIC_TEMPLATES) \
   || defined(BOOST_NO_RVALUE_REFERENCES))
-# include <boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp>
+# include <boost/fusion/container/deque/detail/pp_deque_fwd.hpp>
 #else
-# if !defined(BOOST_FUSION_HAS_CPP11_DEQUE)
-# define BOOST_FUSION_HAS_CPP11_DEQUE
+# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
+# define BOOST_FUSION_HAS_VARIADIC_DEQUE
 # endif
 
 ///////////////////////////////////////////////////////////////////////////////

Deleted: branches/release/boost/fusion/container/deque/detail/cpp03_deque.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/detail/cpp03_deque.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
+++ (empty file)
@@ -1,125 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(BOOST_CPP03_FUSION_DEQUE_26112006_1649)
-#define BOOST_CPP03_FUSION_DEQUE_26112006_1649
-
-#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
-#error "C++03 only! This file should not have been included"
-#endif
-
-#include <boost/fusion/container/deque/limits.hpp>
-#include <boost/fusion/container/deque/front_extended_deque.hpp>
-#include <boost/fusion/container/deque/back_extended_deque.hpp>
-#include <boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp>
-#include <boost/fusion/container/deque/detail/deque_initial_size.hpp>
-#include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/container/deque/detail/keyed_element.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-
-#include <boost/fusion/container/deque/deque_fwd.hpp>
-#include <boost/fusion/container/deque/detail/value_at_impl.hpp>
-#include <boost/fusion/container/deque/detail/at_impl.hpp>
-#include <boost/fusion/container/deque/detail/begin_impl.hpp>
-#include <boost/fusion/container/deque/detail/end_impl.hpp>
-#include <boost/fusion/container/deque/detail/is_sequence_impl.hpp>
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/mpl/bool.hpp>
-
-#include <boost/fusion/support/sequence_base.hpp>
-#include <boost/fusion/support/void.hpp>
-#include <boost/utility/enable_if.hpp>
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/deque/detail/preprocessed/deque.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion {
-
- struct deque_tag;
-
- template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
- struct deque
- :
- detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type,
- sequence_base<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)> >
- {
- typedef deque_tag fusion_tag;
- typedef bidirectional_traversal_tag category;
- typedef typename detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type base;
- typedef typename detail::deque_initial_size<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type size;
- typedef mpl::int_<size::value> next_up;
- typedef mpl::int_<
- mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
- typedef mpl::false_ is_view;
-
-#include <boost/fusion/container/deque/detail/deque_forward_ctor.hpp>
-
- deque()
- {}
-
- explicit deque(typename add_reference<typename add_const<T0>::type>::type t0)
- : base(t0, detail::nil_keyed_element())
- {}
-
- template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
- deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
- : base(seq)
- {}
-
- template<typename Sequence>
- deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
- : base(base::from_iterator(fusion::begin(seq)))
- {}
-
- template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
- deque&
- operator=(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
-
- template <typename T>
- deque&
- operator=(T const& rhs)
- {
- base::operator=(rhs);
- return *this;
- }
-
- };
-}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#endif

Deleted: branches/release/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
+++ (empty file)
@@ -1,54 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2007 Dan Marsden
-
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(FUSION_CPP03_DEQUE_FORWARD_02092007_0749)
-#define FUSION_CPP03_DEQUE_FORWARD_02092007_0749
-
-#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
-#error "C++03 only! This file should not have been included"
-#endif
-
-#include <boost/fusion/container/deque/limits.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion
-{
- struct void_;
-
- template<
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
- FUSION_MAX_DEQUE_SIZE, typename T, void_)>
- struct deque;
-}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#endif

Deleted: branches/release/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
+++ (empty file)
@@ -1,106 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330)
-#define BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330
-
-#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
-#error "C++03 only! This file should not have been included"
-#endif
-
-#include <boost/fusion/container/deque/limits.hpp>
-#include <boost/fusion/container/deque/detail/keyed_element.hpp>
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
-#include <boost/preprocessor/repetition/enum.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/type_traits/add_reference.hpp>
-
-#include <boost/mpl/plus.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/print.hpp>
-
-#define FUSION_VOID(z, n, _) void_
-
-namespace boost { namespace fusion
-{
- struct void_;
-}}
-
-#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
-#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp>
-#else
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_keyed_values" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
-#endif
-
-/*=============================================================================
- Copyright (c) 2001-2011 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)
-
- This is an auto-generated file. Do not edit!
-==============================================================================*/
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(preserve: 1)
-#endif
-
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
-
- struct nil_keyed_element;
-
- template<typename N, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)>
- struct deque_keyed_values_impl;
-
- template<typename N>
- struct deque_keyed_values_impl<N, BOOST_PP_ENUM(FUSION_MAX_DEQUE_SIZE, FUSION_VOID, _)>
- {
- typedef nil_keyed_element type;
-
- static type call()
- {
- return type();
- }
- };
-
- template<typename N, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
- struct deque_keyed_values_impl
- {
- typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
-
- typedef typename deque_keyed_values_impl<
- next_index,
- BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type tail;
- typedef keyed_element<N, T0, tail> type;
-
-#include <boost/fusion/container/deque/detail/deque_keyed_values_call.hpp>
-
- };
-
- template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>
- {};
-
-}}}
-
-#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
-#pragma wave option(output: null)
-#endif
-
-#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
-
-#undef FUSION_VOID
-
-#endif

Deleted: branches/release/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
+++ (empty file)
@@ -1,56 +0,0 @@
-/*=============================================================================
- Copyright (c) 2005-2012 Joel de Guzman
- Copyright (c) 2005-2006 Dan Marsden
-
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(BOOST_FUSION_DEQUE_DETAIL_CPP11_DEQUE_KEYED_VALUES_07042012_1901)
-#define BOOST_FUSION_DEQUE_DETAIL_CPP11_DEQUE_KEYED_VALUES_07042012_1901
-
-#include <boost/fusion/container/deque/detail/keyed_element.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/mpl/int.hpp>
-
-namespace boost { namespace fusion { namespace detail
-{
- template<typename Key, typename Value, typename Rest>
- struct keyed_element;
-
- template <typename N, typename ...Elements>
- struct deque_keyed_values_impl;
-
- template <typename N, typename Head, typename ...Tail>
- struct deque_keyed_values_impl<N, Head, Tail...>
- {
- typedef mpl::int_<(N::value + 1)> next_index;
- typedef typename deque_keyed_values_impl<next_index, Tail...>::type tail;
- typedef keyed_element<N, Head, tail> type;
-
- static type call(
- typename detail::call_param<Head>::type head
- , typename detail::call_param<Tail>::type... tail)
- {
- return type(
- head
- , deque_keyed_values_impl<next_index, Tail...>::call(tail...)
- );
- }
- };
-
- struct nil_keyed_element;
-
- template <typename N>
- struct deque_keyed_values_impl<N>
- {
- typedef nil_keyed_element type;
- static type call() { return type(); }
- };
-
- template <typename ...Elements>
- struct deque_keyed_values
- : deque_keyed_values_impl<mpl::int_<0>, Elements...> {};
-}}}
-
-#endif

Modified: branches/release/boost/fusion/container/deque/detail/deque_forward_ctor.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/detail/deque_forward_ctor.hpp (original)
+++ branches/release/boost/fusion/container/deque/detail/deque_forward_ctor.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -9,10 +9,12 @@
 #if !defined(BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_FORWARD_CTOR_04122006_2212)
 #define BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_FORWARD_CTOR_04122006_2212
 
-#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
 #error "C++03 only! This file should not have been included"
 #endif
 
+#define FUSION_DEQUE_FORWARD_CTOR_FORWARD(z, n, _) std::forward<T##n>(t##n)
+
 #include <boost/preprocessor/iterate.hpp>
 #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
@@ -22,14 +24,22 @@
 #define BOOST_PP_ITERATION_LIMITS (2, FUSION_MAX_DEQUE_SIZE)
 #include BOOST_PP_ITERATE()
 
+#undef FUSION_DEQUE_FORWARD_CTOR_FORWARD
 #endif
 #else
 
 #define N BOOST_PP_ITERATION()
 
 deque(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
- : base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::call(BOOST_PP_ENUM_PARAMS(N, t)))
+ : base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::construct(BOOST_PP_ENUM_PARAMS(N, t)))
+{}
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && t))
+ : base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::
+ forward_(BOOST_PP_ENUM(N, FUSION_DEQUE_FORWARD_CTOR_FORWARD, _)))
 {}
+#endif
 
 #undef N
 #endif

Modified: branches/release/boost/fusion/container/deque/detail/deque_initial_size.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/detail/deque_initial_size.hpp (original)
+++ branches/release/boost/fusion/container/deque/detail/deque_initial_size.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -8,7 +8,7 @@
 #if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139)
 #define BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139
 
-#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
 #error "C++03 only! This file should not have been included"
 #endif
 

Modified: branches/release/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp (original)
+++ branches/release/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -9,25 +9,30 @@
 #if !defined(BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_KEYED_VALUES_CALL_04122006_2211)
 #define BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_KEYED_VALUES_CALL_04122006_2211
 
-#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
 #error "C++03 only! This file should not have been included"
 #endif
 
 #include <boost/preprocessor/iterate.hpp>
 #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#include <boost/preprocessor/repetition/enum_shifted.hpp>
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
 
+#define FUSION_DEQUE_KEYED_VALUES_FORWARD(z, n, _) \
+ std::forward<BOOST_PP_CAT(T, n)>(BOOST_PP_CAT(t, n))
+
 #define BOOST_PP_FILENAME_1 \
     <boost/fusion/container/deque/detail/deque_keyed_values_call.hpp>
 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
 #include BOOST_PP_ITERATE()
 
+#undef FUSION_DEQUE_KEYED_VALUES_FORWARD
 #endif
 #else
 
 #define N BOOST_PP_ITERATION()
 
- static type call(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
+ static type construct(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
         {
             return type(t0,
                         deque_keyed_values_impl<
@@ -38,5 +43,16 @@
>::call(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t)));
         }
 
+ static type forward_(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && t))
+ {
+ return type(std::forward<T0>(t0),
+ deque_keyed_values_impl<
+ next_index
+ #if N > 1
+ , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T)
+ #endif
+ >::forward_(BOOST_PP_ENUM_SHIFTED(N, FUSION_DEQUE_KEYED_VALUES_FORWARD, _)));
+ }
+
 #undef N
 #endif

Modified: branches/release/boost/fusion/container/deque/detail/keyed_element.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/detail/keyed_element.hpp (original)
+++ branches/release/boost/fusion/container/deque/detail/keyed_element.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -47,16 +47,42 @@
                 *it, base::from_iterator(fusion::next(it)));
         }
 
+ keyed_element(keyed_element const& rhs)
+ : Rest(rhs.get_base()), value_(rhs.value_)
+ {}
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ keyed_element(keyed_element&& rhs)
+ : Rest(std::forward<Rest>(rhs.forward_base()))
+ , value_(std::forward<Value>(rhs.value_))
+ {}
+#endif
+
         template <typename U, typename Rst>
         keyed_element(keyed_element<Key, U, Rst> const& rhs)
           : Rest(rhs.get_base()), value_(rhs.value_)
         {}
 
- Rest const get_base() const
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#endif
+
+ Rest& get_base()
+ {
+ return *this;
+ }
+
+ Rest const& get_base() const
         {
             return *this;
         }
 
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ Rest&& forward_base()
+ {
+ return std::forward<Rest>(*static_cast<Rest*>(this));
+ }
+#endif
+
         typename cref_result<Value>::type get(Key) const
         {
             return value_;
@@ -67,10 +93,19 @@
             return value_;
         }
 
- keyed_element(typename call_param<Value>::type value, Rest const& rest)
+ keyed_element(
+ typename detail::call_param<Value>::type value
+ , Rest const& rest)
             : Rest(rest), value_(value)
         {}
 
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ keyed_element(Value&& value, Rest&& rest)
+ : Rest(std::forward<Rest>(rest))
+ , value_(std::forward<Value>(value))
+ {}
+#endif
+
         keyed_element()
             : Rest(), value_()
         {}
@@ -90,6 +125,15 @@
             return *this;
         }
 
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ keyed_element& operator=(keyed_element&& rhs)
+ {
+ base::operator=(std::forward<keyed_element>(rhs));
+ value_ = std::forward<Value>(rhs.value_);
+ return *this;
+ }
+#endif
+
         Value value_;
     };
 

Copied: branches/release/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp (from r80406, /trunk/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp)
==============================================================================
--- /trunk/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp (original)
+++ branches/release/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -38,12 +38,13 @@
             );
         }
 
- static type forward_(Head&& head, Tail&&... tail)
+ template <typename Head_, typename ...Tail_>
+ static type forward_(Head_&& head, Tail_&&... tail)
         {
             return type(
- std::forward<Head>(head)
- , deque_keyed_values_impl<next_index, Tail...>::
- forward_(std::forward<Tail>(tail)...)
+ std::forward<Head_>(head)
+ , deque_keyed_values_impl<next_index, Tail_...>::
+ forward_(std::forward<Tail_>(tail)...)
             );
         }
     };

Modified: branches/release/boost/fusion/container/deque/limits.hpp
==============================================================================
--- branches/release/boost/fusion/container/deque/limits.hpp (original)
+++ branches/release/boost/fusion/container/deque/limits.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -8,7 +8,7 @@
 #if !defined(BOOST_FUSION_DEQUE_LIMITS_26112006_1737)
 #define BOOST_FUSION_DEQUE_LIMITS_26112006_1737
 
-#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
+#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
 #error "C++03 only! This file should not have been included"
 #endif
 

Modified: branches/release/boost/fusion/container/vector/detail/vector_forward_ctor.hpp
==============================================================================
--- branches/release/boost/fusion/container/vector/detail/vector_forward_ctor.hpp (original)
+++ branches/release/boost/fusion/container/vector/detail/vector_forward_ctor.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -12,11 +12,14 @@
 #include <boost/preprocessor/repetition/enum_params.hpp>
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
 
+#define FUSION_FORWARD_CTOR_MOVE(z, n, _) std::move(_##n)
+
 #define BOOST_PP_FILENAME_1 \
     <boost/fusion/container/vector/detail/vector_forward_ctor.hpp>
 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
 #include BOOST_PP_ITERATE()
 
+#undef FUSION_FORWARD_CTOR_MOVE
 #endif
 #else // defined(BOOST_PP_IS_ITERATING)
 ///////////////////////////////////////////////////////////////////////////////
@@ -34,6 +37,14 @@
         N, typename detail::call_param<T, >::type _))
         : vec(BOOST_PP_ENUM_PARAMS(N, _)) {}
 
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if N == 1
+ explicit
+#endif
+ vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _))
+ : vec(BOOST_PP_ENUM(N, FUSION_FORWARD_CTOR_MOVE, _)) {}
+#endif
+
 #undef N
 #endif // defined(BOOST_PP_IS_ITERATING)
 

Modified: branches/release/boost/fusion/container/vector/detail/vector_n.hpp
==============================================================================
--- branches/release/boost/fusion/container/vector/detail/vector_n.hpp (original)
+++ branches/release/boost/fusion/container/vector/detail/vector_n.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -9,24 +9,31 @@
 #if !defined(FUSION_MACRO_05042005)
 #define FUSION_MACRO_05042005
 
-#define FUSION_MEMBER_DEFAULT_INIT(z, n, _) m##n()
-#define FUSION_MEMBER_INIT(z, n, _) m##n(_##n)
-#define FUSION_COPY_INIT(z, n, _) m##n(other.m##n)
-#define FUSION_MEMBER_DECL(z, n, _) T##n m##n;
+#define FUSION_VECTOR_MEMBER_MEMBER_DEFAULT_INIT(z, n, _) m##n()
+#define FUSION_VECTOR_MEMBER_MEMBER_INIT(z, n, _) m##n(_##n)
+#define FUSION_VECTOR_MEMBER_COPY_INIT(z, n, _) m##n(other.m##n)
+#define FUSION_VECTOR_MEMBER_FWD(z, n, _) m##n(std::forward<T##n>(other.m##n))
+#define FUSION_VECTOR_ARG_FWD(z, n, _) m##n(std::forward<T##n>(_##n))
+#define FUSION_VECTOR_MEMBER_MEMBER_DECL(z, n, _) T##n m##n;
+#define FUSION_VECTOR_MEMBER_FORWARD(z, n, _) std::forward<T##n>(_##n)
 
-#define FUSION_MEMBER_ASSIGN(z, n, _) \
+#define FUSION_VECTOR_MEMBER_MEMBER_ASSIGN(z, n, _) \
     this->BOOST_PP_CAT(m, n) = vec.BOOST_PP_CAT(m, n);
 
-#define FUSION_DEREF_MEMBER_ASSIGN(z, n, _) \
+#define FUSION_VECTOR_MEMBER_DEREF_MEMBER_ASSIGN(z, n, _) \
     this->BOOST_PP_CAT(m, n) = *BOOST_PP_CAT(i, n);
 
-#define FUSION_AT_IMPL(z, n, _) \
+#define FUSION_VECTOR_MEMBER_MEMBER_FORWARD(z, n, _) \
+ this->BOOST_PP_CAT(m, n) = std::forward< \
+ BOOST_PP_CAT(T, n)>(vec.BOOST_PP_CAT(m, n));
+
+#define FUSION_VECTOR_MEMBER_AT_IMPL(z, n, _) \
     typename add_reference<T##n>::type \
         at_impl(mpl::int_<n>) { return this->m##n; } \
     typename add_reference<typename add_const<T##n>::type>::type \
         at_impl(mpl::int_<n>) const { return this->m##n; }
 
-#define FUSION_ITER_DECL_VAR(z, n, _) \
+#define FUSION_VECTOR_MEMBER_ITER_DECL_VAR(z, n, _) \
     typedef typename result_of::next< \
         BOOST_PP_CAT(I, BOOST_PP_DEC(n))>::type BOOST_PP_CAT(I, n); \
     BOOST_PP_CAT(I, n) BOOST_PP_CAT(i, n) \
@@ -40,21 +47,32 @@
     struct BOOST_PP_CAT(vector_data, N)
     {
         BOOST_PP_CAT(vector_data, N)()
- : BOOST_PP_ENUM(N, FUSION_MEMBER_DEFAULT_INIT, _) {}
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_MEMBER_DEFAULT_INIT, _) {}
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _))
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_ARG_FWD, _) {}
+#endif
 
         BOOST_PP_CAT(vector_data, N)(
             BOOST_PP_ENUM_BINARY_PARAMS(
                 N, typename detail::call_param<T, >::type _))
- : BOOST_PP_ENUM(N, FUSION_MEMBER_INIT, _) {}
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_MEMBER_INIT, _) {}
 
         BOOST_PP_CAT(vector_data, N)(
             BOOST_PP_CAT(vector_data, N) const& other)
- : BOOST_PP_ENUM(N, FUSION_COPY_INIT, _) {}
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_COPY_INIT, _) {}
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ BOOST_PP_CAT(vector_data, N)(
+ BOOST_PP_CAT(vector_data, N)&& other)
+ : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_FWD, _) {}
+#endif
 
         BOOST_PP_CAT(vector_data, N)&
         operator=(BOOST_PP_CAT(vector_data, N) const& vec)
         {
- BOOST_PP_REPEAT(N, FUSION_MEMBER_ASSIGN, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_ASSIGN, _)
             return *this;
         }
 
@@ -64,7 +82,7 @@
         {
             typedef typename result_of::begin<Sequence const>::type I0;
             I0 i0 = fusion::begin(seq);
- BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _)
+ BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _)
             return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i));
         }
 
@@ -74,11 +92,11 @@
         {
             typedef typename result_of::begin<Sequence>::type I0;
             I0 i0 = fusion::begin(seq);
- BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _)
+ BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _)
             return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i));
         }
 
- BOOST_PP_REPEAT(N, FUSION_MEMBER_DECL, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_DECL, _)
     };
 
     template <BOOST_PP_ENUM_PARAMS(N, typename T)>
@@ -105,6 +123,19 @@
                 N, typename detail::call_param<T, >::type _))
             : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
 
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+#if (N == 1)
+ explicit
+#endif
+ BOOST_PP_CAT(vector, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _))
+ : base_type(BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_FORWARD, _)) {}
+#endif
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ BOOST_PP_CAT(vector, N)(BOOST_PP_CAT(vector, N)&& rhs)
+ : base_type(std::forward<base_type>(rhs)) {}
+#endif
+
         template <BOOST_PP_ENUM_PARAMS(N, typename U)>
         BOOST_PP_CAT(vector, N)(
             BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& vec)
@@ -132,7 +163,7 @@
         BOOST_PP_CAT(vector, N)&
         operator=(BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& vec)
         {
- BOOST_PP_REPEAT(N, FUSION_MEMBER_ASSIGN, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_ASSIGN, _)
             return *this;
         }
 
@@ -142,12 +173,21 @@
         {
             typedef typename result_of::begin<Sequence const>::type I0;
             I0 i0 = fusion::begin(seq);
- BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _)
- BOOST_PP_REPEAT(N, FUSION_DEREF_MEMBER_ASSIGN, _)
+ BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_DEREF_MEMBER_ASSIGN, _)
+ return *this;
+ }
+
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ BOOST_PP_CAT(vector, N)&
+ operator=(BOOST_PP_CAT(vector, N)&& vec)
+ {
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_FORWARD, _)
             return *this;
         }
+#endif
 
- BOOST_PP_REPEAT(N, FUSION_AT_IMPL, _)
+ BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_AT_IMPL, _)
 
         template<typename I>
         typename add_reference<typename mpl::at<types, I>::type>::type
@@ -166,3 +206,4 @@
 
 #undef N
 
+

Modified: branches/release/boost/fusion/container/vector/vector.hpp
==============================================================================
--- branches/release/boost/fusion/container/vector/vector.hpp (original)
+++ branches/release/boost/fusion/container/vector/vector.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -106,6 +106,11 @@
         vector(vector const& rhs)
             : vec(rhs.vec) {}
 
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ vector(vector&& rhs)
+ : vec(std::forward<vector_n>(rhs.vec)) {}
+#endif
+
         template <typename Sequence>
         vector(Sequence const& rhs)
             : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
@@ -135,6 +140,23 @@
             return *this;
         }
 
+#if !defined(BOOST_NO_RVALUE_REFERENCES)
+ vector&
+ operator=(vector&& rhs)
+ {
+ vec = std::forward<vector_n>(rhs.vec);
+ return *this;
+ }
+
+ template <typename T>
+ vector&
+ operator=(T&& rhs)
+ {
+ vec = std::forward<T>(rhs);
+ return *this;
+ }
+#endif
+
         template <int N>
         typename add_reference<
             typename mpl::at_c<types, N>::type

Modified: branches/release/boost/fusion/functional/invocation/invoke.hpp
==============================================================================
--- branches/release/boost/fusion/functional/invocation/invoke.hpp (original)
+++ branches/release/boost/fusion/functional/invocation/invoke.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -57,13 +57,13 @@
         template <typename Function, class Sequence> struct invoke;
     }
 
- template <typename Function, class Sequence>
- inline typename result_of::invoke<Function, Sequence>::type
- invoke(Function, Sequence &);
-
- template <typename Function, class Sequence>
- inline typename result_of::invoke<Function, Sequence const>::type
- invoke(Function, Sequence const &);
+ //~ template <typename Function, class Sequence>
+ //~ inline typename result_of::invoke<Function, Sequence>::type
+ //~ invoke(Function, Sequence &);
+
+ //~ template <typename Function, class Sequence>
+ //~ inline typename result_of::invoke<Function, Sequence const>::type
+ //~ invoke(Function, Sequence const &);
 
     //----- ---- --- -- - - - -
 
@@ -86,6 +86,9 @@
         struct invoke_data_member;
 
         template <typename Function, class Sequence, int N, bool RandomAccess>
+ struct invoke_fn_ptr;
+
+ template <typename Function, class Sequence, int N, bool RandomAccess>
         struct invoke_mem_fn;
 
         #define BOOST_PP_FILENAME_1 <boost/fusion/functional/invocation/invoke.hpp>
@@ -95,10 +98,10 @@
         template <typename F, class Sequence, int N, bool RandomAccess>
         struct invoke_nonmember_builtin
         // use same implementation as for function objects but...
- : invoke_impl< // ...work around boost::result_of bugs
+ : invoke_fn_ptr< // ...work around boost::result_of bugs
                 typename mpl::eval_if< ft::is_function<F>,
                     boost::add_reference<F>, boost::remove_cv<F> >::type,
- Sequence, N, false, RandomAccess >
+ Sequence, N, RandomAccess >
         { };
 
         template <typename Function, class Sequence, int N, bool RandomAccess>
@@ -221,6 +224,35 @@
 
         };
 
+ template <typename Function, class Sequence>
+ struct invoke_fn_ptr<Function,Sequence,N,true>
+ {
+ public:
+
+ typedef typename ft::result_type<Function>::type result_type;
+
+#if N > 0
+
+ template <typename F>
+ static inline result_type
+ call(F & f, Sequence & s)
+ {
+#define M(z,j,data) fusion::at_c<j>(s)
+ return f( BOOST_PP_ENUM(N,M,~) );
+ }
+
+#else
+ template <typename F>
+ static inline result_type
+ call(F & f, Sequence & /*s*/)
+ {
+ return f();
+ }
+
+#endif
+
+ };
+
 
 #if N > 0
         template <typename Function, class Sequence>
@@ -282,6 +314,39 @@
 
         };
 
+ template <typename Function, class Sequence>
+ struct invoke_fn_ptr<Function,Sequence,N,false>
+ {
+ private:
+ typedef invoke_param_types<Sequence,N> seq;
+ public:
+
+ typedef typename ft::result_type<Function>::type result_type;
+
+#if N > 0
+
+ template <typename F>
+ static inline result_type
+ call(F & f, Sequence & s)
+ {
+ typename seq::I0 i0 = fusion::begin(s);
+ BOOST_PP_REPEAT_FROM_TO(1,N,M,~)
+ return f( BOOST_PP_ENUM_PARAMS(N,*i) );
+ }
+
+#else
+
+ template <typename F>
+ static inline result_type
+ call(F & f, Sequence & /*s*/)
+ {
+ return f();
+ }
+
+#endif
+
+ };
+
 #if N > 0
         template <typename Function, class Sequence>
         struct invoke_mem_fn<Function,Sequence,N,false>

Modified: branches/release/boost/fusion/iterator/iterator_adapter.hpp
==============================================================================
--- branches/release/boost/fusion/iterator/iterator_adapter.hpp (original)
+++ branches/release/boost/fusion/iterator/iterator_adapter.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -23,8 +23,8 @@
         iterator_base_type;
         iterator_base_type iterator_base;
 
- iterator_adapter(iterator_base_type const& iterator_base)
- : iterator_base(iterator_base) {}
+ iterator_adapter(iterator_base_type const& iterator_base_)
+ : iterator_base(iterator_base_) {}
 
         // default implementation
         template <typename I1, typename I2>

Modified: branches/release/boost/fusion/sequence/intrinsic/has_key.hpp
==============================================================================
--- branches/release/boost/fusion/sequence/intrinsic/has_key.hpp (original)
+++ branches/release/boost/fusion/sequence/intrinsic/has_key.hpp 2012-10-24 22:06:21 EDT (Wed, 24 Oct 2012)
@@ -68,7 +68,7 @@
 
     template <typename Key, typename Sequence>
     inline typename result_of::has_key<Sequence, Key>::type
- has_key(Sequence const& seq)
+ has_key(Sequence const&)
     {
         typedef typename result_of::has_key<Sequence, Key>::type result;
         return result();


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