> 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

I assume you mean
assert( d == optional<>(2) );

However, I still think this is incorrect....consider
char c = 'c', d = 'c';
char *p, *q;
p = &c; q = &d;
assert( p != q );

It doesn't matter what their values are...it is the addresses of those
values that matter.

Therefore, I think that, if optional<> is a smart ptr,
assert( d != optional<>(2) );
must be true.  Only if two elements are uninitialized should they be
equal...otherwise, we must compare their "pointer" values, not their element
values.

Tanton

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

Reply via email to