```d
auto copy2DArray(T)(const T[][] arr) if (!is(T == class)) {
T[][] copy;
foreach(row; arr) {
T[] tmp;
foreach(field; row) {
tmp ~= field;
}
copy ~= tmp;
}
return copy;
}
```However, the metamorphoses of the types from my first example are very mysterious.
