The rules for argument passing by ref are stricter than for an assignment passed by value - ref requires matching types between the actual and formal arguments (LRM secio 6.22.1). That mean absolutely no difference in type. You never need to pass an function argument by ref, except if your compiler does not do a good job of optimizing. Class variables are already references. There is no need to pass a ref to a reference.
Assignment compatibility for unpacked arrays just requires that the elements have equivalent types (LRM section 6.22.2). However, many implementations seem to allow looser assignment compatible types between elements.