diff --git a/include/boost/unordered/detail/foa/tuple_rotate_right.hpp b/include/boost/unordered/detail/foa/tuple_rotate_right.hpp index 2774cbbb..c95077b2 100644 --- a/include/boost/unordered/detail/foa/tuple_rotate_right.hpp +++ b/include/boost/unordered/detail/foa/tuple_rotate_right.hpp @@ -9,6 +9,7 @@ #ifndef BOOST_UNORDERED_DETAIL_FOA_TUPLE_ROTATE_RIGHT_HPP #define BOOST_UNORDERED_DETAIL_FOA_TUPLE_ROTATE_RIGHT_HPP +#include #include #include #include @@ -18,28 +19,28 @@ namespace unordered{ namespace detail{ namespace foa{ +template +using tuple_rotate_right_return_type=mp11::mp_rotate_right_c< + typename std::remove_cv::type>::type, + 1 +>; + template -auto tuple_rotate_right_aux(mp11::index_sequence,Tuple&& x) - ->std::tuple(std::forward(x)))... - > +tuple_rotate_right_return_type +tuple_rotate_right_aux(mp11::index_sequence,Tuple&& x) { - return std::tuple(std::forward(x)))... - > - { - std::get<(Is+sizeof...(Is)-1)%sizeof...(Is)>(std::forward(x))... - }; + return tuple_rotate_right_return_type{ + std::get<(Is+sizeof...(Is)-1)%sizeof...(Is)>(std::forward(x))...}; } template -auto tuple_rotate_right(Tuple&& x) - ->decltype(tuple_rotate_right_aux( - mp11::make_index_sequence::value>{}, - std::forward(x))) +tuple_rotate_right_return_type tuple_rotate_right(Tuple&& x) { + using RawTuple=typename std::remove_cv< + typename std::remove_reference::type>::type; + return tuple_rotate_right_aux( - mp11::make_index_sequence::value>{}, + mp11::make_index_sequence::value>{}, std::forward(x)); }