On Tuesday, 11 December 2012 at 18:11:32 UTC, Robert Jacques wrote:
On Tue, 11 Dec 2012 11:25:44 -0600, Alex Rønne Petersen wrote:
Interior pointers are OK in the stack and registers, so taking pointers to fields inside aggregates should be fine so long as they are not stored in the heap.

So what about unions?

The pointer & lengths won't work well together if you mix them. Consider.

  struct S {
    union {
      int[] i;
      byte[] b;
    }
  }

  S s;

  s.i.length = 4;
  assert(s.i.length == 4);
  assert(s.b.length == 16); //fails
  assert(s.b.length == 4);  //the implementation

  s.b = cast(byte[]) s.i;
  assert(s.b.length == 16); //true
  assert(s.i.length == 4);  //fails
assert(s.i.length == 16); //the implementation (last twelve Sigfaults probably)

The only way to properly use that is to have one of the data types you always convert from/to, but the GC wouldn't know and might try them all; Although only the base pointer might be considered so...

Reply via email to