14 static_assert(std::is_object_v<T>);
24 requires std::is_convertible_v<U &, T &>
30 requires std::is_convertible_v<U &, T &>
35 explicit constexpr operator bool() const noexcept {
36 return value_ !=
nullptr;
40 return value_ !=
nullptr;
44 assert(value_ !=
nullptr);
49 assert(value_ !=
nullptr);
55 throw std::bad_optional_access();
60 template <
typename U = std::remove_cv_t<T>>
61 requires std::is_convertible_v<U &&, std::remove_cv_t<T>>
62 constexpr std::remove_cv_t<T>
value_or(U &&defaultValue)
const {
64 return static_cast<std::remove_cv_t<T>
>(std::forward<U>(defaultValue));
69 constexpr void reset() noexcept {
74 std::swap(value_, other.value_);
Definition OptionalReference.h:13
constexpr void swap(OptionalReference &other) noexcept
Definition OptionalReference.h:73
constexpr bool has_value() const noexcept
Definition OptionalReference.h:39
constexpr T * operator->() const noexcept
Definition OptionalReference.h:43
constexpr std::remove_cv_t< T > value_or(U &&defaultValue) const
Definition OptionalReference.h:62
constexpr T & value() const
Definition OptionalReference.h:53
constexpr void reset() noexcept
Definition OptionalReference.h:69
friend class OptionalReference
Definition OptionalReference.h:80
T value_type
Definition OptionalReference.h:17
constexpr OptionalReference & operator=(const OptionalReference &other) noexcept=default
constexpr OptionalReference(std::nullopt_t) noexcept
Definition OptionalReference.h:21
constexpr OptionalReference(U &value) noexcept
Definition OptionalReference.h:25
constexpr OptionalReference(const OptionalReference< U > &other) noexcept
Definition OptionalReference.h:31
constexpr OptionalReference(const OptionalReference &other) noexcept=default
constexpr OptionalReference() noexcept
Definition OptionalReference.h:19
constexpr T & operator*() const noexcept
Definition OptionalReference.h:48
Definition GraphColoringAllocator.h:13
void swap(FileHandle &lhs, FileHandle &rhs) noexcept
Definition FileHandle.h:61
OptionalReference(T &) -> OptionalReference< T >