Right, but I was just trying to temporarily avoid GC allocation so I've used a static array instead of a dynamic ones. Also, I don't know of another term that is used to describe a int[][] array, other than multidimensional.
Anyway this works fine for me (int wasn't a requirement in this case): void foo(T)(T val) if (isArray!T) void bar(T)(T val) if (isArray!T && isArray!(ElementType!T))