[optional.observe] (original) (raw)

22 General utilities library [utilities]

22.5 Optional objects [optional]

22.5.3 Class template optional [optional.optional]

22.5.3.7 Observers [optional.observe]

constexpr const T* operator->() const noexcept;constexpr T* operator->() noexcept;

Hardened preconditions: has_value() is true.

Remarks: These functions are constexpr functions.

constexpr const T& operator*() const & noexcept;constexpr T& operator*() & noexcept;

Hardened preconditions: has_value() is true.

Remarks: These functions are constexpr functions.

constexpr T&& operator*() && noexcept;constexpr const T&& operator*() const && noexcept;

Hardened preconditions: has_value() is true.

Effects: Equivalent to: return std​::​move(*val);

constexpr explicit operator bool() const noexcept;

Returns: true if and only if *this contains a value.

Remarks: This function is a constexpr function.

constexpr bool has_value() const noexcept;

Returns: true if and only if *this contains a value.

Remarks: This function is a constexpr function.

constexpr const T& value() const &;constexpr T& value() &;

Effects: Equivalent to:return has_value() ? *val : throw bad_optional_access();

constexpr T&& value() &&;constexpr const T&& value() const &&;

Effects: Equivalent to:return has_value() ? std::move(*val) : throw bad_optional_access();

template<class U = remove_cv_t<T>> constexpr T value_or(U&& v) const &;

Mandates: is_copy_constructible_v<T> && is_convertible_v<U&&, T> is true.

Effects: Equivalent to:return has_value() ? **this : static_cast<T>(std::forward<U>(v));

template<class U = remove_cv_t<T>> constexpr T value_or(U&& v) &&;

Mandates: is_move_constructible_v<T> && is_convertible_v<U&&, T> is true.

Effects: Equivalent to:return has_value() ? std::move(**this) : static_cast<T>(std::forward<U>(v));