On Monday, 20 July 2015 at 14:51:57 UTC, Jonathan M Davis wrote:
On Monday, 20 July 2015 at 14:18:33 UTC, David Nadlinger wrote:
Am I missing something here, or is this a major bug in struct lifetime handling?

I understand why this happens from the DMD source, but it almost seems like it was deliberately written this way; thus the question.

Purposeful or not, I don't see how it could be anything other than a bug. It fundamentally breaks your ability to control what's going on with the construction or destruction of an object. And a quick check seems to indicate that out parameters have the same problem. If I add this function

    void foo(out S s)
    {
    }

and then this to the end of main

    {
        S s;
        foo(s);
    }

it fails to hit the assertion. The dtorCount in 1, which I think is correct, since the out param is a reference to s and thus shouldn't destroy it, but it _should_ assign to it, and it looks like it's just bitblitting S.init rather than assigning it S.init.

- Jonathan M Davis

This bug with "out" and structs is very old:

https://issues.dlang.org/show_bug.cgi?id=6186

It even has 26 votes, but it doesn't seem to be important enough to be fixed.

Kind Regards
Benjamin Thaut

Reply via email to