Date: Mon, 24 Jun 2019 17:26:00 +0200
On 6/24/19 3:59 PM, Johan Williamsson via Std-Discussion wrote:
> What's the rationale behind the decision to allow comparisons between
> values and optional values without at least throwing an exception if the
> optional value is not assigned?
Quoting N3672, section "Relational operators":
"One of the design goals of optional is that objects of type
optional<T> should be valid elements in STL containers and usable with
STL algorithms (at least if objects of type T are). Equality
comparison is essential for optional<T> to model concept Regular. C++
does not have concepts, but being regular is still essential for the
type to be effectively used with STL. Ordering is essential if we want
to store optional values in ordered associative containers. A number
of ways of including the disengaged state in comparisons have been
suggested. The ones proposed, have been crafted such that the axioms
of equivalence and strict weak ordering are preserved: disengaged
optional<T> is simply treated as an additional and unique value of T
equal only to itself; this value is always compared as less than any
value of T"
> What's the rationale behind the decision to allow comparisons between
> values and optional values without at least throwing an exception if the
> optional value is not assigned?
Quoting N3672, section "Relational operators":
"One of the design goals of optional is that objects of type
optional<T> should be valid elements in STL containers and usable with
STL algorithms (at least if objects of type T are). Equality
comparison is essential for optional<T> to model concept Regular. C++
does not have concepts, but being regular is still essential for the
type to be effectively used with STL. Ordering is essential if we want
to store optional values in ordered associative containers. A number
of ways of including the disengaged state in comparisons have been
suggested. The ones proposed, have been crafted such that the axioms
of equivalence and strict weak ordering are preserved: disengaged
optional<T> is simply treated as an additional and unique value of T
equal only to itself; this value is always compared as less than any
value of T"
Received on 2019-06-24 10:27:53