On Tuesday, 16 September 2014 at 14:13:48 UTC, Marc Schütz wrote:
On Tuesday, 16 September 2014 at 11:26:05 UTC, rcor wrote:

Is to! creating a new array of pointers while cast isn't? This isn't a performance critical section and it's not a huge array, so I ask mostly out of curiosity.

Yes, it is. (Probably. I don't have the time to test it now, but it's likely if my theory about the pointer adjustment is correct.)

I guess I could have checked that out myself:

import std.stdio;
import std.conv;

interface I {}
class C : I {}
class D : I {}

void main() {
  C[] c = [new C, new C];
  I[] i = cast(I[]) c;
  I[] i2 = c.to!(I[]);
  assert(c is cast(C[]) i);    // i and c point to same address
assert(i !is i2); // to! appears to create a new array
}

Reply via email to