Copying array with const correctness

Vindex9 tech.vindex at gmail.com
Sun Sep 6 12:35:56 UTC 2026


More versatile:

```d
T[] copyArray(T)(inout(T)[] arr) {
     if (arr.length == 0) {
         return null;
     }
     T[] copy;
     static if (is(T == U[], U) && !is(T == immutable(Y)[], Y)) {
         copy = new T[arr.length];
         foreach(i, ref v; copy) {
             v = copyArray(arr[i]);
         }
     } else static if (is(T == immutable(W)[], W)) {
         copy = new T[arr.length];
         foreach (i, ref elem; arr) {
             copy[i] = elem.idup;
         }
     } else {
         void* raw = GC.calloc(T.sizeof * arr.length, 0, 
typeid(T));
         copy = (cast(T*) raw)[0 .. arr.length];
         foreach(i, ref dest; copy) {
             core.lifetime.copyEmplace(arr[i], dest);
         }
     }
     return copy;
}
```


More information about the Digitalmars-d-learn mailing list