90 operator T&() {
return value_; }
91 operator const T&()
const {
return value_; }
92 auto operator->()
const {
return value_.operator->(); }
93 auto operator->() {
return value_.operator->(); }
94 auto& operator*()
const {
return value_.operator*(); }
95 auto& operator*() {
return value_.operator*(); }
97 bool operator!()
const {
return !value_; }
98 explicit operator bool()
const {
return static_cast<bool>(value_); }
100#if __cpp_impl_three_way_comparison
101 auto operator<=>(
const MaybeNone& other)
const =
default;
108#if !__cpp_impl_three_way_comparison
110template <
typename T>
bool operator==(
const MaybeNone<T>& a,
const MaybeNone<T>& b) {
return a.reference() == b.reference(); }
111template <
typename T>
bool operator!=(
const MaybeNone<T>& a,
const MaybeNone<T>& b) {
return a.reference() != b.reference(); }
112template <
typename T>
bool operator<(
const MaybeNone<T>& a,
const MaybeNone<T>& b) {
return a.reference() < b.reference(); }
113template <
typename T>
bool operator>(
const MaybeNone<T>& a,
const MaybeNone<T>& b) {
return a.reference() > b.reference(); }
114template <
typename T>
bool operator<=(
const MaybeNone<T>& a,
const MaybeNone<T>& b) {
return a.reference() <= b.reference(); }
115template <
typename T>
bool operator>=(
const MaybeNone<T>& a,
const MaybeNone<T>& b) {
return a.reference() >= b.reference(); }
116template <
typename T>
bool operator==(
const MaybeNone<T>& a, std::nullptr_t b) {
return a.reference() == b; }
117template <
typename T>
bool operator!=(
const MaybeNone<T>& a, std::nullptr_t b) {
return a.reference() != b; }
118template <
typename T>
bool operator==(std::nullptr_t a,
const MaybeNone<T>& b) {
return a == b.reference(); }
119template <
typename T>
bool operator!=(std::nullptr_t a,
const MaybeNone<T>& b) {
return a != b.reference(); }