Code: void main() { static string[2] szFormat = ["%s, %s"]; }
This compiles, but this is buggy code. The first declaration should have been: static string[2] szFormat = ["%s", "%s"]; I can't tell whether the first case is legit code. You might *want* to initialize all the elements with the same single initializer. But in that case, you would write: static string[2] szFormat = "%s, "; So, without the '[]'. If you remove static from the declaration (it's still a static array, I know!), you'll get a nice runtime error: object.Exception@src\rt\arraycat.d(31): lengths don't match for array copy Actually it's not a nice error message since you can't even tell what causes the error. So in retrospect: // no error until a call to writefln, // which could still potentially not fail => possible bugs string[2] szFormat = ["%s, %s"]; // error at runtime, the compiler could have caught this though static string[2] szFormat2 = ["%s, %s"];