On Mon, 07 Apr 2014 16:12:48 -0400, Justin Whear <[email protected]> wrote:

On Mon, 07 Apr 2014 19:13:30 +0000, Jeroen Bollen wrote:

When I have myarray.length, why isn't that considered an lvalue,
and as a result, why cannot I get a pointer to it?

It seems kinda dumb, I understand it cannot be changed manually,
but surely you should be able to get a const(type)* from it?

I believe `length` is implemented as a property function, though I can't
find the source for the life of me.

It's a compiler builtin property. Reading simply returns the value from inside the array (does not map to a property). Setting calls one of these two depending on the array type:

https://github.com/D-Programming-Language/druntime/blob/master/src/rt/lifetime.d#L1282
https://github.com/D-Programming-Language/druntime/blob/master/src/rt/lifetime.d#L1460

The reason you can't get a pointer to it is that it's not a simple variable.

Note, unlike C++, D does not allow you to get a const reference or pointer to an Rvalue.

-Steve

Reply via email to