summaryrefslogtreecommitdiff
path: root/boost/variant/detail/apply_visitor_unary.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/variant/detail/apply_visitor_unary.hpp')
-rw-r--r--boost/variant/detail/apply_visitor_unary.hpp21
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