On 1/9/14 9:08 PM, Manu wrote:
So I'm interacting with C (although it works the same in D), I call a
function that returns a pointer, and gives the size through an out arg:
   ubyte* test(size_t* ptr)
   {
*ptr = 100;
return cast(ubyte*)1234;
   }


And call it, but immediately use the size argument to slice a range:
   size_t size;
   ubyte[] t = test(&size)[0..size];

t is null.

If I do this, it works:
   size_t size;
   ubyte* pt = test(&size);
   ubyte[] t = pt[0..size];

Why should I need that extra line?

It's a bug in the compiler. Evaluation should proceed as if it were strictly left to right. So test(&size) must be called before size is loaded to construct the slice. Please report.

Andrei

Reply via email to