
"Brock Peabody" <brock.peabody@npcinternational.com> writes:
On Behalf Of Fernando Cacciola Sent: Tuesday, March 01, 2005 10:39 AM To: boost@lists.boost.org Subject: [boost] Re: [optional] new assignmet semantic and references
So I think I will fix it unless users speak up... Though I will post this issue in the users list as well.
First I'd like to say that I love optional<>. When I first read about it I didn't think I'd use it much, but now I find myself using it all over the place. It's useful for so many things, but to me the most important is how it improves my ability to make code self-documenting.
Personally, I like it the way it is. I've used optional quite a bit and it makes sense to me that operator= changes what an optional holds. I don't think it is a good idea to give operator= special semantics for references.
I had the same feeling. That's what I meant when I said "It depends on whether you view optional<T> as a T that might just happen to be missing, or as a container for a T." I think "a container for a T" is a more manageable meaning for optional<T>.
I think it odd, for instance, that given the following optionals:
int a = 5, b = 6;
boost::optional<int&> ra = a, rb = b;
this:
ra = rb;
would have different behavior than:
ra.reset();
ra = rb;
I can understand the desire to mimic the semantics of built in C++ references in boost::optional, but one uses boost::optional precisely in cases where one does not want those semantics - in cases where a reference may not be present, and where you may want to change which object is referred too.
This is what I'd have said if I'd had the time to really consider it deeply and write it out. Nice, Brock. -- Dave Abrahams Boost Consulting www.boost-consulting.com