From fb1edf51e8cd519e309713de15fd8ca863b31371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20Krzemie=C5=84ski?= Date: Tue, 6 Oct 2015 12:39:02 +0200 Subject: [PATCH] value_or_eval fix --- .../boost/optional/detail/optional_reference_spec.hpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/include/boost/optional/detail/optional_reference_spec.hpp b/include/boost/optional/detail/optional_reference_spec.hpp index 61e7eee..79d1869 100644 --- a/include/boost/optional/detail/optional_reference_spec.hpp +++ b/include/boost/optional/detail/optional_reference_spec.hpp @@ -92,10 +92,6 @@ public: T* operator->() const { BOOST_ASSERT(ptr_); return ptr_; } T& operator*() const { BOOST_ASSERT(ptr_); return *ptr_; } T& value() const { return ptr_ ? *ptr_ : (throw_exception(bad_optional_access()), *ptr_); } - - - template - T& value_or_eval(F f) const { return ptr_ ? *ptr_ : detail::forward_reference(f()); } bool operator!() const BOOST_NOEXCEPT { return ptr_ == 0; } BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT() @@ -134,6 +130,9 @@ public: void reset(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if >::type* = 0) BOOST_NOEXCEPT { detail::prevent_binding_rvalue(); ptr_ = boost::addressof(r); } + template + T& value_or_eval(F f) const { return ptr_ ? *ptr_ : detail::forward_reference(f()); } + #else // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES template @@ -162,6 +161,9 @@ public: void reset(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if >::type* = 0) BOOST_NOEXCEPT { ptr_ = boost::addressof(v); } + template + T& value_or_eval(F f) const { return ptr_ ? *ptr_ : f(); } + #endif // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES };