Boost logo

Boost :

Subject: Re: [boost] variant2 never empty guarantees
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2017-06-09 07:43:18


2017-06-09 1:05 GMT+02:00 Gavin Lambert via Boost <boost_at_[hidden]>:

> On 9/06/2017 01:22, Andrzej Krzemienski wrote:
>
>> 2017-06-08 15:01 GMT+02:00 Peter Dimov:
>>
>>> I'm not sure I understand this fully; could you please explain from what
>>>> expressions, and under what conditions, you expect the strong guarantee?
>>>>
>>>> variant<X, Y> v1, v2;
>>>> X x;
>>>>
>>>> v1= v2; // do you expect strong guarantee here?
>>>> v1 = std::move(v2); // here?
>>>> v1 = x; // here?
>>>> v1 = std::move(x); // here?
>>>> v1.emplace<X>(); // here?
>>>>
>>>>
>>> Anyone? This is a genuine inquiry. How can I give you strong guarantee if
>>> you don't tell me when and where you want it?
>>>
>>>
>> Maybe nobody needs the strong guarantee? This is definitely the case for
>> my
>> programs. I put variants in different containers. But if exception is
>> thrown while modifying them I am destroying the entire data structure. I
>> do
>> not need the previous state. If I cannot put the new one, I cannot proceed
>> anyway.
>>
>> (I am not saying such guarantee is useless. I just observe that the need
>> occurred in my programs.)
>>
>
> The only case that I can think of at the moment is for something like a
> state machine, where each type in the variant is a possible state and the
> current value is the current state. If a transition fails via throwing
> from the new state constructor then presumably the state machine should
> remain in the previous state.
>

It is funny that you should say that. I remember I wanted at some point to
test one of Boost's state machines in my toy projects, and I had the exact
opposite expectation: when the the new state B was being initialized I
wanted to be able to still access the previous state A, to steal (move)
some data from it.

Regards,
&rzej;


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