mirror of
https://github.com/boostorg/optional.git
synced 2025-07-24 17:47:34 +02:00
value_or_eval fix
This commit is contained in:
@ -92,10 +92,6 @@ public:
|
|||||||
T* operator->() const { BOOST_ASSERT(ptr_); return ptr_; }
|
T* operator->() const { BOOST_ASSERT(ptr_); return ptr_; }
|
||||||
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_); }
|
T& value() const { return ptr_ ? *ptr_ : (throw_exception(bad_optional_access()), *ptr_); }
|
||||||
|
|
||||||
|
|
||||||
template <class F>
|
|
||||||
T& value_or_eval(F f) const { return ptr_ ? *ptr_ : detail::forward_reference(f()); }
|
|
||||||
|
|
||||||
bool operator!() const BOOST_NOEXCEPT { return ptr_ == 0; }
|
bool operator!() const BOOST_NOEXCEPT { return ptr_ == 0; }
|
||||||
BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
|
BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
|
||||||
@ -134,6 +130,9 @@ public:
|
|||||||
void reset(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R> >::type* = 0) BOOST_NOEXCEPT
|
void reset(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R> >::type* = 0) BOOST_NOEXCEPT
|
||||||
{ detail::prevent_binding_rvalue<R>(); ptr_ = boost::addressof(r); }
|
{ detail::prevent_binding_rvalue<R>(); ptr_ = boost::addressof(r); }
|
||||||
|
|
||||||
|
template <class F>
|
||||||
|
T& value_or_eval(F f) const { return ptr_ ? *ptr_ : detail::forward_reference(f()); }
|
||||||
|
|
||||||
#else // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
#else // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||||
|
|
||||||
template <class U>
|
template <class U>
|
||||||
@ -162,6 +161,9 @@ public:
|
|||||||
void reset(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U> >::type* = 0) BOOST_NOEXCEPT
|
void reset(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U> >::type* = 0) BOOST_NOEXCEPT
|
||||||
{ ptr_ = boost::addressof(v); }
|
{ ptr_ = boost::addressof(v); }
|
||||||
|
|
||||||
|
template <class F>
|
||||||
|
T& value_or_eval(F f) const { return ptr_ ? *ptr_ : f(); }
|
||||||
|
|
||||||
#endif // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
#endif // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user