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