Boost logo

Boost :

Subject: Re: [boost] compact_optional -- prompting interest
From: Gavin Lambert (gavinl_at_[hidden])
Date: 2015-09-28 18:40:05


On 28/09/2015 21:05, Andrzej Krzemienski wrote:
>> No, I was suggesting to allow assignment of values of type T (i.e.
>> "opt = v;"). Having a named function like store_raw_value reduces the
>> need in the typedef but the syntax should still be simpler.
[...]
> In a way, this would mean and implicit conversion from T to
> compact_optional<T>. I do not want any kind of implicit conversion between
> the two (because the two are something different). I could offer:
>
> opt.raw_value() = some_T;

This is still clunky; either an implicit conversion or simply an
additional assignment operator to permit the other syntax is better.

It's also logical -- an optional type is essentially a superset of the
original type (in the case of boost::optional it's a precise superset,
while in this case it's technically an equivalent set with one redefined
value, but since that value is supposedly invalid for the original type
it's still logically a superset).

The only real danger that I can see of supporting the direct assignment
syntax is if someone explicitly assigns the sentinel value directly.
But while that's bad style it shouldn't be undefined behaviour.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk