Here's a slightly better solution. The lines will be copied.

```d
T[] copyArray(T)(inout(T)[] arr) {
    T[] copy = new T[arr.length];
    copy.length = arr.length;
    static if (is(T == U[], U) && !is(T == immutable(Y)[], Y)) {
        foreach(i, ref v; copy) {
            v = copyArray(arr[i]);
        }
    } else {
        for (size_t i = 0; i < arr.length; i++) {
            static if (is(T == immutable(Y)[], Y)) {
                copy[i] = arr[i].idup;
            } else {
// it doesn't work with postblit, only with modern copy ctor
                T elem = arr[i];
                copy[i] = elem;
            }
        }
    }
    return copy;
}
```

Reply via email to