0+1*cm=1*cm works in mc11 and mc14, but the f(0,0,d)= function call fails in mc11 while it works in mc14. The logic associated with matrices, including extracting 0 from them, doesn't seem consistent to me.
My beef with mixed units in arrays with mc11 was never that matrices and vectors were limited to a single unit, but that there was no way to create tables of objects that were useful for data entry with units or collections of objects that could be used like a structure in c. For data entry, a table might want to have a first row with text headers, a second row with different units for different columns of data and the remaining rows containing normal scalars or possibly nested matrices for easy data extraction. Other collections might mix any combination of text, function pointers, nested arrays, ... for whatever purpose the user had in mind.
The issue I'm running into with 0 in arrays might show up more in programming where I often initialize vector sizes using v[n<-0 and later initialize the individual elements with calls like v[3 = x. Allowing vectors to have more than one unit means I lose a lot of type checking which catches quite a few errors. I'm inclined to want to either tell Mathcad either explicitly in a statement such as M := Table(nrows,ncols) or implicitly by adding non-scalar elements such as string values that the object in question isn't a vector/matrix so allow individual elements to have individual units.
As to making 0 a mutable element when it comes to units, there's the issue of being able to read old Mathcad worksheets along with the clean looking way of initializing sparse arrays with 0 rather than 0*unit where the unit may not be known until run time - a perfect example of dynamic units.
Robert