On Wed, 18 Nov 2015 20:57:06 +0000, Spacen Jasset wrote: > Should this be allowed? What is it's purpose? It could compare two > arrays, but surely not that each element of type char is null? > > char[] buffer; > if (buffer == null) {}
'null' is a value of ambiguous type. The compiler finds a set of compatible types for them by applying known implicit conversions. 'null' can implicitly convert to 'char[]'. Arrays, of course, are tuples consisting of a start pointer and length. A null array is essentially {ptr = null, length = 0}. Array equality is implemented as, roughly: --- if (a.length != b.length) return false; foreach (i, v; a) { if (v != b[i]) return false; } return true; --- (That's not quite how it's implemented; it uses runtime functions and indirection. But it's the same algorithm.) This shows us that all 0-length arrays are equal. Pretty much as we'd expect. So your code is equivalent to: --- char[] buffer; if (buffer.length == 0) {} ---