From: Joel de Guzman (joel_at_[hidden])
Date: 2003-11-02 21:05:09
Agreed. Thanks for your insights. See my other post and
feel free to comment.
-- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net Eric Friedman <ebf_at_[hidden]> wrote: > 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.
Boost list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk