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
>> programs. I put variants in different containers. But if exception is
>> thrown while modifying them I am destroying the entire data structure. I
>> not need the previous state. If I cannot put the new one, I cannot proceed
>> (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.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk