From 9dcdfa323f19b81b37ee50061612af5057c2f50f Mon Sep 17 00:00:00 2001 From: Joel de Guzman Date: Thu, 31 Jan 2013 15:31:28 +0000 Subject: [PATCH] Better deque conversion [SVN r82669] --- .../boost/fusion/container/deque/convert.hpp | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/include/boost/fusion/container/deque/convert.hpp b/include/boost/fusion/container/deque/convert.hpp index 33176dc9..09b01291 100644 --- a/include/boost/fusion/container/deque/convert.hpp +++ b/include/boost/fusion/container/deque/convert.hpp @@ -43,6 +43,21 @@ namespace boost { namespace fusion } }; + template + struct push_front_deque; + + template + struct push_front_deque> + { + typedef deque type; + + static type + call(T const& first, deque const& rest) + { + return type(front_extended_deque, T>(rest, first)); + } + }; + template struct build_deque { @@ -50,16 +65,19 @@ namespace boost { namespace fusion build_deque::type, Last> next_build_deque; - typedef front_extended_deque< - typename next_build_deque::type - , typename result_of::value_of::type> - type; + typedef push_front_deque< + typename result_of::value_of::type + , typename next_build_deque::type> + push_front; + + typedef typename push_front::type type; static type call(First const& f, Last const& l) { typename result_of::value_of::type v = *f; - return type(next_build_deque::call(fusion::next(f), l), v); + return push_front::call( + v, next_build_deque::call(fusion::next(f), l)); } }; } @@ -102,6 +120,7 @@ namespace boost { namespace fusion #include #include #include +#include namespace boost { namespace fusion {