$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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.