24 using nonConstT =
typename std::remove_const<T>::type;
33 bool has_value()
const {
return _ptr; }
37 throw std::bad_optional_access();
42 T& value_or(T& default_)
const {
return _ptr ? *_ptr : default_; }
43 void reset() { _ptr =
nullptr; }
45 T* operator->()
const {
return _ptr; }
46 T& operator*()
const {
return *_ptr; }
63 explicit operator bool()
const {
return _ptr; }
66 if ( has_value() && other.has_value() )
67 return value() == other.value();
69 return ! (has_value() || other.has_value());
72 bool operator!=(
const optional_ref<T>& other)
const {
return ! (*
this == other); }
74 operator std::optional<nonConstT>()
const {
Definition: optional-ref.h:22