On Monday, 20 July 2015 at 14:56:45 UTC, Benjamin Thaut wrote:
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.

That bug report certainly paints a more complicated and controversial picture on the issue than I would have expected. But I think that the issue is pretty much the same as what David's bringing up. Certainly, having

S[2] a;
a = S.init;

and

void foo(out S s) {}
S s;
foo(a);

not be consistent seems like a bad idea. In both cases, we're dealing with setting the variable to its init value, and having that not be the same in all circumstances just seems like it's begging for trouble...

The only way that I can see that they would reasonably be different would be if out were simply disallowing the variable to be anything other than its init value, which might make sense, but it wouldn't make sense when explicitly assigning the init value to a variable. So, making it so that out requires that the variable be its init value is really just sidestepping the issue with out while still leaving it elsewhere, so sidestepping it with out doesn't really save us from having to solve the problem.

- Jonathan M Davis

Reply via email to