On 16 Aug 2016 21:01, "Dicebot via Digitalmars-d-announce" <digitalmars-d-announce@puremagic.com> wrote:
>
> On Tuesday, 16 August 2016 at 18:55:40 UTC, Dicebot wrote:
>>
>> On Tuesday, 16 August 2016 at 18:25:42 UTC, Meta wrote:
>>>
>>> What about this?
>>>
>>> struct Rnd
>>> {
>>>     int* state;
>>> }
>>>
>>> void test()
>>> {
>>>     scope rnd = new Rnd();
>>>     Rnd rnd2 = *rnd;
>>>
>>>     saveGlobalState(rnd2);
>>> }
>>
>>
>> Same as far as I understand, because "from a lifetime analysis viewpoint, a struct is considered a juxtaposition of its direct members" (https://github.com/dlang/DIPs/blob/master/DIPs/DIP1000.md#aggregates). You need to add one more level of indirection for things to start going complicated.
>
>
> Ah no, sorry, I have missed that you allocate struct on heap. Yes, this is simplified problem case indeed. Intention is that such struct can be made @safe by making all pointer fields private and adding scope semantics in getter methods but it is hard to reason about details at this point.

It will be nice to see a set of tests that are expected to pass, a set that are expected to fail, and a set that segfault.

In my questions I was trying to make small examples, that could become tests.

The examples in the DIP are quite simple actually. The pointer escaping example is what I was missing.