On Wednesday, 21 December 2016 at 15:01:20 UTC, Eugene Wissner
wrote:
On Wednesday, 21 December 2016 at 14:15:06 UTC, John C wrote:
On Wednesday, 21 December 2016 at 11:45:18 UTC, Eugene Wissner
wrote:
This prints 3 times "Destruct" with dmd 0.072.1. If I remove
the if block, it prints "Destruct" only 2 times - the
behavior I'm expecting. Why?
Possibly to do with named return value optimisation.
Isn't an optimization that changes the behavior bad? I had a
crash in the code where the destructor did something
meaningfull, freed the memory (the same pointer) twice.
It isn't an optimization that changes behavior.
It removes an unnecessary allocation for the returning copy of
the struct, as the return value is never used. Hence why it's
pointless that it would be compiled anyway.