//! [wrapped_type_documentation]
\typealias \1::wrapped_type

The type that is wrapped by this type.

This type is always deprived of qualifiers and is never a pointer
type.
//! [wrapped_type_documentation]

//! [has_equality_operator_documentation]
\variable \1::has_equality_operator_v

True when the wrapped_type can be compared for equality.

When this is the case, \1 can be compared for equality and inequality.
//! [has_equality_operator_documentation]

//! [has_less_than_operator_documentation]
\variable \1::has_less_than_operator_v

True when the wrapped_type can be compared for lesserness.

When this is the case, \1 can be compared for lesserness.
//! [has_less_than_operator_documentation]

//! [has_strictly_less_than_operator_documentation]
\variable \1::has_strictly_less_than_operator_v

True when the wrapped_type can be compared for strict lesserness.

When this is the case, \1 can be compared for strict lesserness.
//! [has_stricly_less_than_operator_documentation]

//! [has_greater_than_operator_documentation]
\variable \1::has_greater_than_operator_v

True when the wrapped_type can be compared for greaterness.

When this is the case, \1 can be compared for greaterness.
//! [has_less_than_operator_documentation]

//! [has_strictly_greater_than_operator_documentation]
\variable \1::has_strictly_greater_than_operator_v

True when the wrapped_type can be compared for strict greaterness.

When this is the case, \1 can be compared for strict greaterness.
//! [has_stricly_greater_than_operator_documentation]

//! [refine_documentation]
\fn static std::optional<\1> \1::refine(wrapped_type value)

Returns an instance of \1 wrapping \a value if \a value respects the
guarantees that are required by \1.

If such is not the case, \c {std::nullopt} is returned instead.
//! [refine_documentation]

//! [value_documentation]
\fn const wrapped_type& \1::value() const noexcept

Returns a const reference to the value that is wrapped by this
instance.
//! [value_documentation]

//! [copy_constructor_documentation]
\fn \1::\1(const \1& other)

Copy-constructs an instance of \1 from \a other.

This constructor is generated by the compiler.
//! [copy_constructor_documentation]

//! [copy_assignment_documentation]
\fn \1::operator=(const \1& other)

Copy-assigns to this instance of \1 from \a other.

This constructor is generated by the compiler.
//! [copy_assignment_documentation]

//! [move_constructor_documentation]
\fn \1::\1(\1&& other)

Move-constructs an instance of \1 from \a other.

The only valid operations on an instance that was moved-from are
destruction and reassignment.

This constructor is generated by the compiler.
//! [move_constructor_documentation]

//! [move_assignment_documentation]
\fn \1::operator=(\1&& other)

Move-assigns to this instance of \1 from \a other.

The only valid operations on an instance that was moved-from are
destruction and reassignment.

This constructor is generated by the compiler.
//! [move_assignment_documentation]

//! [conversion_documentation]
\fn operator wrapped_type() const

Converts this instance to its wrapped value.
//! [conversion_documentation]

//! [operator_equal_documentation]
\fn bool operator=(const \1& rhs) const noexcept

Returns true if the value wrapped by this instance and \a rhs compare
equal.

Returns false otherwise.
//! [operator_equal_documentation]

//! [operator_unequal_documentation]
\fn bool operator!=(const \1& rhs) const noexcept

Returns true if the value wrapped by this instance and \a rhs do not
compare equal.

Returns false otherwise.
//! [operator_unequal_documentation]

//! [operator_less_than_documentation]
\fn bool operator<(const \1& rhs) const noexcept

Returns true if the value wrapped by this instance compares less than
the value wrapped by \a rhs.

Returns false otherwise.
//! [operator_less_than_documentation]

//! [operator_less_than_or_equal_documentation]
\fn bool operator<=(const \1& rhs) const noexcept

Returns true if the value wrapped by this instance compares less than
or equal than the value wrapped by \a rhs.

Returns false otherwise.
//! [operator_less_than_or_equal_documentation]

//! [operator_greater_than_documentation]
\fn bool operator>(const \1& rhs) const noexcept

Returns true if the value wrapped by this instance compares greater
than the value wrapped by \a rhs.

Returns false otherwise.
//! [operator_greater_than_documentation]

//! [operator_greater_than_or_equal_documentation]
\fn bool operator>=(const \1& rhs) const noexcept

Returns true if the value wrapped by this instance compares greater
than or equal or equal than the value wrapped by \a rhs.

Returns false otherwise.
//! [operator_greater_than_or_equal_documentation]
