Tanton Gibbs said:
>> optional<int> opt0(1);
>> optional<int> opt1(2);
>> (opt0 == opt1) // true
>
> I would not have any problem with this returning false.  In the normal
> ptr world:
> char c, d;
> char* p, *q;
> p = &c;
> q = &d;
>
> if( p == q ) // false
>
> People expect it to compare memory locations, not initialization status.
> Therefore, I would have no problem with operator== returning true only
> if both
> were uninitialized.

I agree with this.  The optional<> concept takes some type and extends
it's possible values to include a new "uninitialized" value.  It seems
wholly logical to me for this:

optional<int> a();
optional<int> b();
optional<int> c(1);
optional<int> d(2);
optional<int> e(2);

assert(a == b);  // both uninitialized
assert(a != c);  // one uninitialized
assert(c != d);  // both initialized to different values
assert(d == 3);  // both initialized to same value

However, not all types wrapped in optional<T> will be comparable... so,
I'm not adverse to leaving comparison operators out just to simplify the
interface.  I just don't agree with the current rationale.

William E. Kempf



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to