Validity of cast(void*)size_t.max

Steven Schveighoffer schveiguy at yahoo.com
Mon Mar 5 16:07:49 UTC 2018


On 3/5/18 9:01 AM, Nordlöw wrote:
> On Monday, 5 March 2018 at 12:41:06 UTC, Steven Schveighoffer wrote:
>> pragma(inline, true)
>> C lazyDeleted() pure nothrow @trusted { return 
>> cast(C)((cast(size_t*)null) + 1); }
> 
> I still can't evaluate at compile-though...
> 
>          enum holeKeyOffset = 0x1;
> 
>          pragma(inline, true)
>          static K holeKey() @trusted pure nothrow @nogc
>          {
>              return cast(K)((cast(size_t*)null) + holeKeyOffset);
>          }
> 
>          enum _ = holeKey;
> 
> fails as
> 
>      Error: cannot perform pointer arithmetic on non-arrays at compile time

No, I mean you call holeKey at *runtime*. Inlined, it's just returning a 
constant, so it should reduce to a constant.

-Steve


More information about the Digitalmars-d-learn mailing list