Testing array ptr for offset 0...

Adam D. Ruppe via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 26 05:31:46 PDT 2016


On Thursday, 26 May 2016 at 07:51:46 UTC, Era Scarecrow wrote:
>  If the ptr is at offset 0, we declare it first, otherwise 
> second, simple... Except this fails since "no property 
> 'offsetof' for type 'void*'". SO... I make a template to test 
> for it instead.


Built-in arrays are kinda magical and thus their members aren't 
ordinary members you can inspect like that.

>     return *(cast(size_t*) &arr) != 1;

And I'm pretty sure that cast is illegal in CTFE. Perhaps the bug 
here is that dmd isn't throwing an error when it is supposed to...

The value being compared gives 0 when I try it, which wouldn't 
make sense for either .length or .ptr.

>  Am i going about this the wrong way?

I don't think there's a need for a test because the ABI spec says 
length is always defined to be at offset zero anyway:

http://dlang.org/spec/abi.html#arrays

If you want to test it, a runtime assert would probably be 
enough, at least then it won't do the wrong thing and your 
message can tell the user to recompile.

Runtime assert is prolly better anyway just in case ctfe 
disagrees with the execution platform.


More information about the Digitalmars-d-learn mailing list