From f96bbef8fa3dc929c33784b9b821f662febfd5ba Mon Sep 17 00:00:00 2001 From: Joel de Guzman Date: Sun, 27 Jan 2013 12:15:26 +0000 Subject: [PATCH] MSVC (VC11) fixes for latest updates [SVN r82634] --- .../deque/detail/deque_forward_ctor.hpp | 15 +++++++--- .../deque/detail/deque_keyed_values_call.hpp | 11 +++---- .../container/deque/detail/pp_as_deque.hpp | 2 +- .../container/deque/detail/pp_deque.hpp | 29 +++++++++++++++++-- .../deque/detail/pp_deque_keyed_values.hpp | 2 +- .../generation/detail/pp_deque_tie.hpp | 6 ++-- .../generation/detail/pp_make_deque.hpp | 9 ++++-- .../vector/detail/vector_forward_ctor.hpp | 6 ++-- 8 files changed, 58 insertions(+), 22 deletions(-) diff --git a/include/boost/fusion/container/deque/detail/deque_forward_ctor.hpp b/include/boost/fusion/container/deque/detail/deque_forward_ctor.hpp index 30db3263..805b9d55 100644 --- a/include/boost/fusion/container/deque/detail/deque_forward_ctor.hpp +++ b/include/boost/fusion/container/deque/detail/deque_forward_ctor.hpp @@ -13,7 +13,7 @@ #error "C++03 only! This file should not have been included" #endif -#define FUSION_DEQUE_FORWARD_CTOR_FORWARD(z, n, _) std::forward(t##n) +#define FUSION_DEQUE_FORWARD_CTOR_FORWARD(z, n, _) std::forward(t##n) #include #include @@ -30,14 +30,21 @@ #define N BOOST_PP_ITERATION() +#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) deque(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference::type>::type t)) : base(detail::deque_keyed_values::construct(BOOST_PP_ENUM_PARAMS(N, t))) {} -#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) -deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && t)) +#else + +deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& t)) + : base(detail::deque_keyed_values::construct(BOOST_PP_ENUM_PARAMS(N, t))) +{} + +template +deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T_, && t)) : base(detail::deque_keyed_values:: - forward_(BOOST_PP_ENUM(N, FUSION_DEQUE_FORWARD_CTOR_FORWARD, _))) + forward_(BOOST_PP_ENUM(N, FUSION_DEQUE_FORWARD_CTOR_FORWARD, _))) {} #endif diff --git a/include/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp b/include/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp index d457516f..eb0d115e 100644 --- a/include/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp +++ b/include/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp @@ -19,7 +19,7 @@ #include #define FUSION_DEQUE_KEYED_VALUES_FORWARD(z, n, _) \ - std::forward(BOOST_PP_CAT(t, n)) + std::forward(BOOST_PP_CAT(t, n)) #define BOOST_PP_FILENAME_1 \ @@ -40,16 +40,17 @@ #if N > 1 , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T) #endif - >::call(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t))); + >::construct(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t))); } - static type forward_(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && t)) + template + static type forward_(BOOST_PP_ENUM_BINARY_PARAMS(N, T_, && t)) { - return type(std::forward(t0), + return type(std::forward(t0), deque_keyed_values_impl< next_index #if N > 1 - , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T) + , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T_) #endif >::forward_(BOOST_PP_ENUM_SHIFTED(N, FUSION_DEQUE_KEYED_VALUES_FORWARD, _))); } diff --git a/include/boost/fusion/container/deque/detail/pp_as_deque.hpp b/include/boost/fusion/container/deque/detail/pp_as_deque.hpp index 906f4fb6..3532bfc6 100644 --- a/include/boost/fusion/container/deque/detail/pp_as_deque.hpp +++ b/include/boost/fusion/container/deque/detail/pp_as_deque.hpp @@ -78,7 +78,7 @@ namespace boost { namespace fusion { namespace detail typedef typename fusion::result_of::value_of::type \ BOOST_PP_CAT(T, n); -#define BOOST_PP_FILENAME_1 +#define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE) #include BOOST_PP_ITERATE() diff --git a/include/boost/fusion/container/deque/detail/pp_deque.hpp b/include/boost/fusion/container/deque/detail/pp_deque.hpp index 6d3b4987..7169da09 100644 --- a/include/boost/fusion/container/deque/detail/pp_deque.hpp +++ b/include/boost/fusion/container/deque/detail/pp_deque.hpp @@ -92,8 +92,11 @@ namespace boost { namespace fusion { {} #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) - explicit deque(T0&& t0) - : base(std::forward(t0), detail::nil_keyed_element()) + template + explicit deque(T0_&& t0 + , typename enable_if >::type* /*dummy*/ = 0 + ) + : base(std::forward(t0), detail::nil_keyed_element()) {} explicit deque(deque&& rhs) @@ -145,6 +148,28 @@ namespace boost { namespace fusion { #endif }; + + template <> + 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 + deque(Sequence const&, + typename enable_if< + mpl::and_< + traits::is_sequence + , result_of::empty>>::type* /*dummy*/ = 0) + {} + + deque() {} + }; + }} #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) diff --git a/include/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp b/include/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp index a7c4939a..b27f4af4 100644 --- a/include/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp +++ b/include/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp @@ -68,7 +68,7 @@ namespace boost { namespace fusion { namespace detail { typedef nil_keyed_element type; - static type call() + static type construct() { return type(); } diff --git a/include/boost/fusion/container/generation/detail/pp_deque_tie.hpp b/include/boost/fusion/container/generation/detail/pp_deque_tie.hpp index ea0afb92..174b58b0 100644 --- a/include/boost/fusion/container/generation/detail/pp_deque_tie.hpp +++ b/include/boost/fusion/container/generation/detail/pp_deque_tie.hpp @@ -6,8 +6,8 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_PP_IS_ITERATING -#if !defined(FUSION_DEQUE_TIE_07192005_1242) -#define FUSION_DEQUE_TIE_07192005_1242 +#if !defined(FUSION_PP_DEQUE_TIE_07192005_1242) +#define FUSION_PP_DEQUE_TIE_07192005_1242 #include #include @@ -53,7 +53,7 @@ namespace boost { namespace fusion #define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)& -#define BOOST_PP_FILENAME_1 +#define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE) #include BOOST_PP_ITERATE() diff --git a/include/boost/fusion/container/generation/detail/pp_make_deque.hpp b/include/boost/fusion/container/generation/detail/pp_make_deque.hpp index 588a5aee..ca478635 100644 --- a/include/boost/fusion/container/generation/detail/pp_make_deque.hpp +++ b/include/boost/fusion/container/generation/detail/pp_make_deque.hpp @@ -6,8 +6,8 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_PP_IS_ITERATING -#if !defined(FUSION_MAKE_DEQUE_07162005_0243) -#define FUSION_MAKE_DEQUE_07162005_0243 +#if !defined(FUSION_PP_MAKE_DEQUE_07162005_0243) +#define FUSION_MAKE_PP_DEQUE_07162005_0243 #include #include @@ -66,7 +66,10 @@ namespace boost { namespace fusion #define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \ typename detail::as_fusion_element::type -#define BOOST_PP_FILENAME_1 +#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \ + typename detail::as_fusion_element::type + +#define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE) #include BOOST_PP_ITERATE() diff --git a/include/boost/fusion/container/vector/detail/vector_forward_ctor.hpp b/include/boost/fusion/container/vector/detail/vector_forward_ctor.hpp index cc7a1e41..bd65d436 100644 --- a/include/boost/fusion/container/vector/detail/vector_forward_ctor.hpp +++ b/include/boost/fusion/container/vector/detail/vector_forward_ctor.hpp @@ -12,14 +12,14 @@ #include #include -#define FUSION_FORWARD_CTOR_MOVE(z, n, _) std::move(_##n) +#define FUSION_FORWARD_CTOR_FORWARD(z, n, _) std::forward(_##n) #define BOOST_PP_FILENAME_1 \ #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #include BOOST_PP_ITERATE() -#undef FUSION_FORWARD_CTOR_MOVE +#undef FUSION_FORWARD_CTOR_FORWARD #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// @@ -43,7 +43,7 @@ explicit #endif vector(BOOST_PP_ENUM_BINARY_PARAMS(N, U, && _)) - : vec(BOOST_PP_ENUM(N, FUSION_FORWARD_CTOR_MOVE, _)) {} + : vec(BOOST_PP_ENUM(N, FUSION_FORWARD_CTOR_FORWARD, _)) {} #endif #undef N