Pointer semantics in CTFE

Steven Schveighoffer schveiguy at yahoo.com
Fri May 25 07:06:55 PDT 2012


On Fri, 25 May 2012 02:50:21 -0400, Don Clugston <dac at nospam.com> wrote:

> The current implementation of CTFE strictly enforces C pointer  
> semantics. One of the restrictions is that you cannot perform ordering  
> comparisons between unrelated pointers.
> This is important for repeatability: if it was permitted, the results  
> would be arbitrary and might vary unpredictably with subtle changes in  
> the code, or change between compiler releases.
>
> But, there's an interesting case from bug 7898: the 'inside' operation.
> If p and q are pointers to the same array, then (r >= p && r <= q) is  
> true if r points inside that array, and false if it does not.
> This seems to be a perfectly reasonable operation: it is completely  
> repeatable and safe, regardless of what r points to. But there doesn't  
> seem to be any way to rewrite it to avoid the disallowed comparisons.
>
> I could write code to allow this special case in CTFE. There's a bit of  
> work to make sure that all the valid cases are detected, because there  
> are quite a lot of ways to rewrite it, but it's not too terrible.
>
> But I dunno, I don't like this sort of thing much. Feels a bit clunky.
> OTOH it seems like necessary functionality, and I can't see any other  
> way of doing it.
>
> Opinions?

Remove the restriction.  The code is unpredictable, but not invalid.  It  
just means you need to take more care when writing such code.

-Steve


More information about the Digitalmars-d mailing list