Peter Alexander: > Since default constructors for structs are not allowed, how do I go > about making all the elements of this Matrix struct default to zero? > (floats default to nan by default).
This doesn't work, I don't know why: float[M][N] elements = 0.0; A bad looking solution: struct Matrix(int M, int N) { float[M][N] elements; static Matrix opCall() { Matrix m; foreach (ref row; m.elements) row[] = 0.0; return m; } } void main() { auto m = Matrix!(3, 3)(); assert(m.elements[0][0] == 0); } A possible solution avoids going against the language (the default nan value for FP values isn't there for show, it's there because it improves your code): struct Matrix(int M, int N) { float[M][N] elements; this(float init=0) { foreach (ref row; elements) row[] = init; } } void main() { auto m = Matrix!(3, 3)(0.0); assert(m.elements[0][0] == 0); } This doesn't work: struct Matrix(int M, int N) { float[M][N] elements; this(float init=0.0) { foreach (ref row; elements) row[] = init; } } void main() { auto m = Matrix!(3, 3)(); assert(m.elements[0][0] == 0); } Bye, bearophile