Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions include/boost/optional/detail/optional_reference_spec.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,31 +122,31 @@ class optional<T&> : public optional_detail::optional_tag
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES

template <class R>
optional(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R> >::type* = 0) BOOST_NOEXCEPT
optional(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<R>::type>::value >::type* = 0) BOOST_NOEXCEPT
: ptr_(boost::addressof(r)) { detail::prevent_binding_rvalue<R>(); }

template <class R>
optional(bool cond, R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R> >::type* = 0) BOOST_NOEXCEPT
optional(bool cond, R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<R>::type>::value >::type* = 0) BOOST_NOEXCEPT
: ptr_(cond ? boost::addressof(r) : 0) { detail::prevent_binding_rvalue<R>(); }

template <class R>
BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R>, optional<T&>&>::type
BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<R>::type>::value >::type
operator=(R&& r) BOOST_NOEXCEPT { detail::prevent_binding_rvalue<R>(); ptr_ = boost::addressof(r); return *this; }

template <class R>
void emplace(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R> >::type* = 0) BOOST_NOEXCEPT
void emplace(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<R>::type>::value >::type* = 0) BOOST_NOEXCEPT
{ detail::prevent_binding_rvalue<R>(); ptr_ = boost::addressof(r); }

template <class R>
T& get_value_or(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R> >::type* = 0) const BOOST_NOEXCEPT
T& get_value_or(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<R>::type>::value >::type* = 0) const BOOST_NOEXCEPT
{ detail::prevent_binding_rvalue<R>(); return ptr_ ? *ptr_ : r; }

template <class R>
T& value_or(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<R> >::type* = 0) const BOOST_NOEXCEPT
T& value_or(R&& r, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<R>::type>::value >::type* = 0) const BOOST_NOEXCEPT
{ detail::prevent_binding_rvalue<R>(); return ptr_ ? *ptr_ : r; }

template <class R>
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_c<!boost::is_same<optional<T&>, typename boost::decay<R>::type>::value >::type* = 0) BOOST_NOEXCEPT
{ detail::prevent_binding_rvalue<R>(); ptr_ = boost::addressof(r); }

template <class F>
Expand All @@ -155,33 +155,33 @@ class optional<T&> : public optional_detail::optional_tag
#else // BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES

template <class U>
optional(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U> >::type* = 0) BOOST_NOEXCEPT : ptr_(boost::addressof(v)) { }
optional(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<U>::type>::value >::type* = 0) BOOST_NOEXCEPT : ptr_(boost::addressof(v)) { }

template <class U>
optional(bool cond, U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U> >::type* = 0) BOOST_NOEXCEPT : ptr_(cond ? boost::addressof(v) : 0) {}
optional(bool cond, U& v, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<U>::type>::value >::type* = 0) BOOST_NOEXCEPT : ptr_(cond ? boost::addressof(v) : 0) {}

template <class U>
BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U>, optional<T&>&>::type
BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<U>::type>::value >::type
operator=(U& v) BOOST_NOEXCEPT
{
detail::prevent_assignment_from_false_const_integral<U>();
ptr_ = boost::addressof(v); return *this;
}

template <class U>
void emplace(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U> >::type* = 0) BOOST_NOEXCEPT
void emplace(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<U>::type>::value >::type* = 0) BOOST_NOEXCEPT
{ ptr_ = boost::addressof(v); }

template <class U>
T& get_value_or(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U> >::type* = 0) const BOOST_NOEXCEPT
T& get_value_or(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<U>::type>::value >::type* = 0) const BOOST_NOEXCEPT
{ return ptr_ ? *ptr_ : v; }

template <class U>
T& value_or(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if<detail::is_no_optional<U> >::type* = 0) const BOOST_NOEXCEPT
T& value_or(U& v, BOOST_DEDUCED_TYPENAME boost::enable_if_c<!boost::is_same<optional<T&>, typename boost::decay<U>::type>::value >::type* = 0) const BOOST_NOEXCEPT
{ return ptr_ ? *ptr_ : v; }

template <class U>
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_c<!boost::is_same<optional<T&>, typename boost::decay<U>::type>::value >::type* = 0) BOOST_NOEXCEPT
{ ptr_ = boost::addressof(v); }

template <class F>
Expand Down