|
Boost : |
From: Eric Friedman (ebf_at_[hidden])
Date: 2003-10-31 16:53:42
Joel,
I have not followed the development of optional too closely, so I am
unsure of the current assignment semantics for optional<T>, let alone
optional<T&>. That said, comparison to variant might nonetheless be
helpful...
Joel de Guzman wrote:
> What I would really like to see is this parallel:
>
> int a = 4;
> int& r = a;
> r = 3; // a is now 3
>
> <...>
>
> int a = 4;
> optional<int&> o(a);
> o = 3; // a is now 3
>
> Treating uninitialized lhs as initialization of the reference would
> rule out the assignment of constants and literals, right?
Well this sort of usage is explicitly disallowed with variant:
int a = 4;
variant<int&> v(a);
v = 3; // compile error!
This is because I view variant as a "multi-type, single-value"
container. Thus, one must instead write something like the following:
int a = 4;
variant<boost::empty, int&> v(a);
boost::get<int&>(v) = 3; // or use a visitor
assert(a == 3);
My understanding is that this would map to
int a = 4;
optional<int&> o(a);
*o = 3;
instead of your desired syntax.
In short, if optional<T&> were to mirror variant<empty, T&>, then
attempted use of optional<T&>::operator= should result in a compile error.
Eric
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk