On Wednesday, 15 December 2021 at 08:27:25 UTC, RazvanN wrote:
>On Tuesday, 14 December 2021 at 12:14:52 UTC, Tejas wrote:
>Sorry for reviving this thread, was just sifting through...
The following code also outputs dtor!
, unfortunately :(
import std.stdio:writeln;
struct S{
@disable this();
~this(){
writeln("dtor!");
}
}
void main(){
S s = void;
}
Compiler :
LDC - the LLVM D compiler (1.25.0):
based on DMD v2.095.1 and LLVM 11.1.0
This has come up in the past and typically folks have agreed that once you used void initialization it is your problem to make sure that the object is valid before destruction. I, personally, do not agree with that; since you are bypassing construction, you should also bypass destruction, however, an argument can be made for both sides.
My perspective is that currently you have an easy way to bypass destruction but you need to do the union trick to bypass destruction. I would vote for having a dip that would somehow make it easy to express the intent that you want to avoid destruction for a specific object.
Sorry for the late reply.
What is this trick that bypasses destructors?
Also, I've always heard bad things about Unions, saying how they encourage bad practices like type punning. Is using this Union trick really recommended?