diff --git a/include/boost/fusion/adapted/struct/detail/define_struct_inline.hpp b/include/boost/fusion/adapted/struct/detail/define_struct_inline.hpp index 6e3630a3..7bc5fe08 100644 --- a/include/boost/fusion/adapted/struct/detail/define_struct_inline.hpp +++ b/include/boost/fusion/adapted/struct/detail/define_struct_inline.hpp @@ -203,7 +203,7 @@ BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_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_ITERATOR_IMPL_IMPL( \ NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \ @@ -304,17 +304,22 @@ #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( \ - BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \ + ATTRIBUTES_SEQ_SIZE, \ BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \ BOOST_FUSION_IGNORE_1) \ - (ATTRIBUTES_SEQ) \ + (BOOST_PP_IF( \ + ATTRIBUTES_SEQ_SIZE, \ + ATTRIBUTES_SEQ, \ + 0)) \ { \ } \ \ BOOST_PP_IF( \ - BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \ + ATTRIBUTES_SEQ_SIZE, \ BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \ BOOST_FUSION_IGNORE_2) \ (NAME, ATTRIBUTES_SEQ) \ diff --git a/include/boost/fusion/container/deque/detail/keyed_element.hpp b/include/boost/fusion/container/deque/detail/keyed_element.hpp index 4dc60500..e5bdc2ab 100644 --- a/include/boost/fusion/container/deque/detail/keyed_element.hpp +++ b/include/boost/fusion/container/deque/detail/keyed_element.hpp @@ -93,7 +93,9 @@ namespace boost { namespace fusion { namespace detail return value_; } - keyed_element(Value const& value, Rest const& rest) + keyed_element( + typename detail::call_param::type value + , Rest const& rest) : Rest(rest), value_(value) {} diff --git a/include/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp b/include/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp index dd57b3a4..aae26a5b 100644 --- a/include/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp +++ b/include/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp @@ -38,12 +38,13 @@ namespace boost { namespace fusion { namespace detail ); } - static type forward_(Head&& head, Tail&&... tail) + template + static type forward_(Head_&& head, Tail_&&... tail) { return type( - std::forward(head) - , deque_keyed_values_impl:: - forward_(std::forward(tail)...) + std::forward(head) + , deque_keyed_values_impl:: + forward_(std::forward(tail)...) ); } };