On Tuesday, 10 July 2018 at 11:58:53 UTC, Jonathan M Davis wrote:

Does it allow to remove the "T.init must always be valid for structs" rule?

Why would it? init is the state of the object before any constructor runs, and quite a few things rely on it. The fact that we've allowed default initialization to be disabled already causes plenty of problems as it is. It's occasionally useful, but it definitely complicates things. D was designed with the idea that every type has an init value.

What problem are you trying to solve here?

- Jonathan M Davis

None, I was just reacting to https://medium.com/@feepingcreature/d-structs-dont-work-for-domain-data-c09332349f43

Proper D structs almost require having a T.init that is valid, and in turn many public members may get to check for internal validity before doing things. This is in stark contrast to C++ where "proper" constructor is guaranteed so you don't check such validity.

What is a "correct" T.init for a mutex RAII struct? It is a null handle value. It's obviously an invalid value for any purpose, but the D wrapper has to be a valid struct.

Reply via email to