20 Memory management library [mem]

20.4 Types for composite class design [mem.composite.types]

20.4.1 Class template indirect [indirect]

20.4.1.8 Relational operators [indirect.relops]

template<class U, class AA> constexpr bool operator==(const indirect& lhs, const indirect<U, AA>& rhs) noexcept(noexcept(*lhs == *rhs));
Mandates: The expression *lhs == *rhs is well-formed and its result is convertible to bool.
Returns: If lhs is valueless or rhs is valueless, lhs.valueless_after_move() == rhs.valueless_after_move(); otherwise *lhs == *rhs.
template<class U, class AA> constexpr synth-three-way-result<T, U> operator<=>(const indirect& lhs, const indirect<U, AA>& rhs);
Returns: If lhs is valueless or rhs is valueless, !lhs.valueless_after_move() <=> !rhs.valueless_after_move(); otherwise synth-three-way(*lhs, *rhs).