| |
 | Posted by Nick Treleaven in reply to Luna | Permalink Reply |
|
Nick Treleaven 
| On Sunday, 27 April 2025 at 22:01:11 UTC, Luna wrote:
> Elaborate refers to destructors which are not automatically generated by the D compiler; eg. If you have a type with subtypes that can be destroyed D will automatically set up a destructor that handles the destruction chain for you. But if you define your own destructor; potentially in a template your destructor now becomes elaborate since it has more functionality than just ensuring its children are destroyed if needed. Elaborate destructors only apply to structs however, not classes.
An elaborate destructor can either be directly declared for a type or generated by the compiler due to its fields:
static struct S2 { ~this() {} }
static struct S3 { S2 field; }
static assert( hasElaborateDestructor!S2);
static assert( hasElaborateDestructor!S3);
|