diff options
Diffstat (limited to 'boost/variant/detail/apply_visitor_unary.hpp')
-rw-r--r-- | boost/variant/detail/apply_visitor_unary.hpp | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/boost/variant/detail/apply_visitor_unary.hpp b/boost/variant/detail/apply_visitor_unary.hpp index 09f70a0b47..7e93a51415 100644 --- a/boost/variant/detail/apply_visitor_unary.hpp +++ b/boost/variant/detail/apply_visitor_unary.hpp @@ -155,9 +155,9 @@ struct result_wrapper1 { typedef decltype(result_multideduce1<Visitor, Variant>::deduce()) result_type; - Visitor& visitor_; - explicit result_wrapper1(Visitor& visitor) BOOST_NOEXCEPT - : visitor_(visitor) + Visitor&& visitor_; + explicit result_wrapper1(Visitor&& visitor) BOOST_NOEXCEPT + : visitor_(::boost::forward<Visitor>(visitor)) {} template <class T> @@ -169,26 +169,15 @@ struct result_wrapper1 }} // namespace detail::variant template <typename Visitor, typename Visitable> -inline decltype(auto) apply_visitor(Visitor& visitor, Visitable&& visitable, +inline decltype(auto) apply_visitor(Visitor&& visitor, Visitable&& visitable, typename boost::disable_if< boost::detail::variant::has_result_type<Visitor> >::type* = 0) { - boost::detail::variant::result_wrapper1<Visitor, typename remove_reference<Visitable>::type> cpp14_vis(visitor); + boost::detail::variant::result_wrapper1<Visitor, typename remove_reference<Visitable>::type> cpp14_vis(::boost::forward<Visitor>(visitor)); return ::boost::forward<Visitable>(visitable).apply_visitor(cpp14_vis); } -template <typename Visitor, typename Visitable> -inline decltype(auto) apply_visitor(const Visitor& visitor, Visitable&& visitable, - typename boost::disable_if< - boost::detail::variant::has_result_type<Visitor> - >::type* = 0) -{ - boost::detail::variant::result_wrapper1<const Visitor, typename remove_reference<Visitable>::type> cpp14_vis(visitor); - return ::boost::forward<Visitable>(visitable).apply_visitor(cpp14_vis); -} - - #endif // !defined(BOOST_NO_CXX14_DECLTYPE_AUTO) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276) } // namespace boost |