mrdocs::Optional

A compact optional that automatically uses nullable_traits<T> when available.

Synopsis

Declared in <mrdocs/ADT/Optional.hpp>

template<class T>
class Optional;

Description

Design

  • If nullable_traits<T> exists, the null state is encoded inside T (via sentinel or clearable-empty semantics). Storage is exactly one T.

  • Otherwise, this falls back to std::optional<T> and uses its discriminator.

This single implementation uses a conditional storage type plus if constexpr on has_nullable_traits_v<T> to select the appropriate behavior at compile time.

Type Aliases

NameDescription
value_type Value type stored by this Optional.

Member Functions

NameDescription
Optional [constructor]Constructors
operator= Assignment operators
emplace In-place construct a new value, replacing any existing one.
has_value True if engaged (contains a value).
operator* Dereference-like access.
operator-> Pointer-like access.
reset Reset to the null state. *
value Value access. Preconditions: has_value() is true.
operator bool Contextual bool.

Static Member Functions

NameDescription
is_inlined Determine if the value is inlined via nullable traits.

Specializations

NameDescription
Optional<T&> Optional reference wrapper that never owns storage.

Non-Member Functions

NameDescription
getOperatorReadableNameReturn the human-readable name of the operator
getPrimaryLocationDetermine a location to use when none is explicitly chosen.
getPrimaryLocationChoose the best location to display for a symbol.
innerTypeReturn the inner type.
innerTypeReturn the inner type.
operator!=Compares an Optional to a value for inequality. Returns true if the Optional is disengaged or its value does not equal rhs.
operator!=Compares two Optional values for inequality. Returns true if their engagement states differ or their contained values are not equal.
operator<Checks if the Optional is less than a value. Returns true if the Optional is disengaged or its value is less than rhs.
operator<Checks if the left Optional is less than the right Optional. Returns true if the right is engaged and either the left is disengaged or its value is less.
operator<=Checks if the Optional is less than or equal to a value. Returns true if the Optional is disengaged or its value is less than or equal to rhs.
operator<=Checks if the left Optional is less than or equal to the right Optional. Returns true if the left is disengaged or the right is engaged and the left's value is less or equal.
operator<=>Performs a three-way comparison between an Optional and a value. If the Optional is engaged, compares its value to v; otherwise, returns less.
operator<=>Performs a three-way comparison between two Optional values. If both are engaged, compares their contained values; otherwise, compares engagement state.
operator<=>Performs a three-way comparison between an Optional and std::nullopt. Returns std::strong_ordering::greater if engaged, std::strong_ordering::equal if disengaged.
operator==Compares two Optional values for equality. Returns true if both are engaged and their contained values are equal, or both are disengaged.
operator==Compares an engaged Optional to a value for equality. Returns true if the Optional is engaged and its value equals rhs.
operator==Checks if the Optional is disengaged (equal to std::nullopt). Returns true if the Optional does not contain a value.
operator>Checks if the Optional is greater than a value. Returns true if the Optional is engaged and its value is greater than rhs.
operator>Checks if the left Optional is greater than the right Optional. Returns true if the left is engaged and either the right is disengaged or its value is greater.
operator>=Checks if the left Optional is greater than or equal to the right Optional. Returns true if the right is disengaged or the left is engaged and its value is greater or equal.
operator>=Checks if the Optional is greater than or equal to a value. Returns true if the Optional is engaged and its value is greater than or equal to rhs.
swapSwap two Optional references.
dom::stringOrNullReturn a non-empty string, or a null.