Allow default constructors for structs
Dukc
ajieskola at gmail.com
Fri Aug 30 12:29:43 UTC 2024
monkyyy kirjoitti 30.8.2024 klo 14.11:
> On Thursday, 29 August 2024 at 14:28:09 UTC, Ogi wrote:
>> struct T {
>> S s;
>> // implicit `@disable this();`
>> }
>
> why? I *just* got bitten by nested structs being hard to init (with
> terrible error messages), why not just fix the problem?
There is a reason. D is designed so that every type, except `noreturn`,
has an `.init` value. It's supposed to be a value, not a function. This
is why a struct cannot have a default constructor. If we break that
pattern, then we run into some pretty strange situtions. For example,
what would be the `.init` value of a static array of structs with a
default constructor? What if the `.init` value of such a struct is used
at CTFE? If the struct is a member of another struct, should the default
constructor be called only once to determine `.init` value of the parent
struct, or every time the parent struct is initialised?
However, I agree that structs (and unions) with context pointers are
really annoying because they break that pattern of `.init` value for
every type. Maybe it should be allowed to initialise nested structs with
a null context.
More information about the dip.ideas
mailing list