https://issues.dlang.org/show_bug.cgi?id=17765
--- Comment #2 from Nicholas Wilson <[email protected]> --- Yeah the compiler was not able to determine that all values were assigned despite there being no conditional logic for the initialisation: foreach(i; 0 .. M-1) { corr[i][i] = 1.0; for (auto j = i+1; j < M; j++) { corr[i][j] = 0.0; for (auto k = 0; k < N; k++) corr[i][j] += data[k][i] * data[k][j]; corr[j][i] = corr[i][j]; } } foreach(i; 0 .. M) corr[M-1][i] = 0.0; corr[M-1][M-1] = 1.0; >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 > } That would also work and would probably be less effort in the compiler and less confusing. > This shouldn't be allowed in @safe code. Definitely. --
