"Iain K.Hanson" <[EMAIL PROTECTED]> writes: >> [mailto:[EMAIL PROTECTED]]On Behalf Of Peter Dimov >> Sent: 12 December 2002 17:09 >> >> From: "Iain K.Hanson" <[EMAIL PROTECTED]> >> > >> > :-) true. But it also does not have container semantics either. >> > I prefered your analogy with a special valued INT. Given that we >> > have >> > *opt1 == *opt2 >> > for ordinary value comparisons >> >> But this doesn't work when one of the optionals is >> uninitialized. opt1 == >> opt2 (as proposed) is a safer version of the above, as its behavior is >> always defined. It also has the desirable property >> >> optional b(a); >> assert(b == a); >> >> for any a (i.e. it represents "equivalent to" as used by >> CopyConstructible >> and Assignable.) >> > > given that dereference is defined then the *potentially* unsafe > *opt1 == *opt2 is defined. However the lack of safty is very small > as C++ programmers have to be very aware that dereferencing an > uninitiallised pointer does very bad things at run time. This is so > ingrained that I can't see the problem. > > Given the above, I can't see the utility of defining rel-ops with container > semantics. Particularly as if opt1 == opt2 returns false you have no idea > if it is because there is a value mis-match or a state mis-match.
1. The contained value is part of the state. Pretending otherwise just confuses everything. 2. As long as there's a way to check for an emptiness mismatch (what you're calling a "state mismatch", e.g. x.empty() == y.empty()), I don't why there's a problem that operator== doesn't make that distinction clear. > I can see the logic in your argument, but given that optional is > neither "fish nor fowl" ( its not a smart pointer, its not a > container, and its not just a value ), I would rather go for the > semantics that offer most utility. How is Peter's suggestion less-useful? -- David Abrahams [EMAIL PROTECTED] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost