kyllingstad/phobos — comment on commit 8de508a96856146167c7505313b92f3b1a4f4105
File: std/path.d line 177
By schveiguy:

T[] foo(T)(T[] arr)

Does this modify arr? It obviously can't if T is const or immutable, but what if it's mutable? Given that the const/immutable versions compile, it's highly likely that foo doesn't modify arr. But it's still potentially possible to use static if to modify the array and allow all three versions to compile.

Contrast that to:

inout(T)[] foo(T)(inout(T)[] arr)

Which guarantees (sans cast) arr is not modified, even if T is mutable. It also prominently displays that in the signature.