https://issues.dlang.org/show_bug.cgi?id=17765
Steven Schveighoffer <schvei...@yahoo.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |schvei...@yahoo.com --- Comment #1 from Steven Schveighoffer <schvei...@yahoo.com> --- In the case of out variables, one of the reasons the init is done is to ensure that the data is all written to. 2 things: 1. If the compiler can prove that the out variable is completely written in all paths, then the initial write can be removed (could be happening already). 2. If the out = void syntax is accepted, and not all the data is written, then this should really be an error. Both require advanced flow analysis, and may not be possible in all cases, so the result is that in cases where =void is used, not writing all the data is going to be UB. Another issue is that the current grammar/syntax defines =X to mean "pass X as parameter if none specified". =void looks weird, and it also doesn't fit the grammar if you have required parameters after it. I was wondering if this could more of an implementation detail in the function itself. i.e.: void g(out float[M][M] corr) { corr = void; // disables the initial write } This shouldn't be allowed in @safe code. --