- patch from nathan ridge

- fixed deque regression 

[SVN r80458]
This commit is contained in:
Joel de Guzman
2012-09-09 00:27:37 +00:00
parent a856857cb7
commit b57cd4ede9
3 changed files with 17 additions and 9 deletions

View File

@ -203,7 +203,7 @@
BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \ BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \
NAME, \ NAME, \
ATTRIBUTES_SEQ, \ ATTRIBUTES_SEQ, \
BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE((0)ATTRIBUTES_SEQ)))
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \ #define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \
NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \ NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \
@ -304,17 +304,22 @@
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \ #define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \
NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \ 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() \ NAME() \
BOOST_PP_IF( \ BOOST_PP_IF( \
BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \ ATTRIBUTES_SEQ_SIZE, \
BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \ BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \
BOOST_FUSION_IGNORE_1) \ BOOST_FUSION_IGNORE_1) \
(ATTRIBUTES_SEQ) \ (BOOST_PP_IF( \
ATTRIBUTES_SEQ_SIZE, \
ATTRIBUTES_SEQ, \
0)) \
{ \ { \
} \ } \
\ \
BOOST_PP_IF( \ BOOST_PP_IF( \
BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \ ATTRIBUTES_SEQ_SIZE, \
BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \ BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \
BOOST_FUSION_IGNORE_2) \ BOOST_FUSION_IGNORE_2) \
(NAME, ATTRIBUTES_SEQ) \ (NAME, ATTRIBUTES_SEQ) \

View File

@ -93,7 +93,9 @@ namespace boost { namespace fusion { namespace detail
return value_; return value_;
} }
keyed_element(Value const& value, Rest const& rest) keyed_element(
typename detail::call_param<Value>::type value
, Rest const& rest)
: Rest(rest), value_(value) : Rest(rest), value_(value)
{} {}

View File

@ -38,12 +38,13 @@ namespace boost { namespace fusion { namespace detail
); );
} }
static type forward_(Head&& head, Tail&&... tail) template <typename Head_, typename ...Tail_>
static type forward_(Head_&& head, Tail_&&... tail)
{ {
return type( return type(
std::forward<Head>(head) std::forward<Head_>(head)
, deque_keyed_values_impl<next_index, Tail...>:: , deque_keyed_values_impl<next_index, Tail_...>::
forward_(std::forward<Tail>(tail)...) forward_(std::forward<Tail_>(tail)...)
); );
} }
}; };