> It would be nice if boost::optional<T> had operator< defined whenever > operator< was defined for T. This would allow us to use optional<T> > as the key of an associative container. I suggest the following > semantics: > > bool operator<(optional<T> const &x, optional<T> const &y); > > Returns: If y is uninitialized, false. If y is initialized and x is > uninitialized, true. If x and y are both initialized, (*x < *y). > > This results in a strict weak ordering with uninitialized optional<T> > objects being sorted first.
Yes, I previously implemented this functionality -- exactly in the manner you described -- in my nilable<T> implementaton. It's quite useful to have. (If anyone is curious, nilable<T> was inspired by optional<T>, though the implementation is not derived from optional's. The main differences are that nilable<T> doesn't use pointer deferencing for access to the internal value. Instead, it provides a direct, checked conversion to T (using boost::throw_exception with a bad cast error when the object obj is nil), obj.nil() returning bool, and obj.unsafe_reference() and obj.unsafe_value() for when one has previously ensured obj.nil() is false and want to make further accesses without that being tested repeatedly.) Dave _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost