H. S. Teoh hsteoh at qfbox.info
Fri Aug 5 15:22:57 UTC 2022

On Fri, Aug 05, 2022 at 08:06:00AM -0700, Ali Çehreli via Digitalmars-d-learn wrote:
> [...] I realized that the following fails with a RangeError:
> void main() {
>   auto arr = [1, 2, 3];
>   arr[0..$-1] = arr[1..$];    // <-- Runtime error
> }
> I suspect the length of the array is stamped too soon. (?)
> Should that operation be supported?

This is why in C there's a difference between memcpy and memmove.  I
don't know how to express the equivalent in D, though. In general, you
can't tell until runtime whether two slices overlap (`arr` could be
aliased by another slice, for example, so you can't just tell by whether
you're copying an overlapping range from the same variable).

But if you know beforehand the ranges being copied are overlapping, you
could use std.algorithm.bringToFront which would do the Right Thing(tm)
in this case.


Why are you blatanly misspelling "blatant"? -- Branden Robinson

More information about the Digitalmars-d-learn mailing list