I took the syntax from your article, maybe it is not what D is using now.

It is more expressive to pass the dimensions as separate variables. This is also exactly what other dependently typed languages do. The memory corruption can be avoided by having the compiler check this. I agree though that fat pointers are more convenient and would should also have them as syntax sugar on top of it.

The syntax in the article is what I proposed for C. Sorry that wasn't clear.

Yes, the separate variables is more expressive. It's also clumsy, inelegant, and error-prone. It also only works for function calls - not fields in a struct.