On Tuesday, 27 December 2022 at 09:41:59 UTC, Max Samukha wrote:
>If T.init is supposed to be a valid value, then the constructor receives an already initialized object (not some "branded" abberant), so the constructor actually plays the role of assignment.
If T.init is supposed to be an invalid value useful for debugging, then variables initialized to that value... are not initialized.
The .init
value is supposed to be both. A null pointer is a good example. It is valid in the sense it's behaviour is reliable. Dereferencing it always crashes the program, as opposed to undefined behaviour. Also it will reliably say yes when compared to another null pointer.
But it is also an useful value for debugging, because accidently using it immediately crashes and produces a core dump, making it obvious we had a null where there shouldn't be one. Also when debugging, pointer to address 0x0000_0000_0000_0000
is clearly uninitialised, while a pointer to whatever happens might look like it's pointing to something valid.