Pointer semantics in CTFE

Artur Skawina art.08.09 at gmail.com
Fri May 25 04:11:33 PDT 2012


On 05/25/12 08:50, Don Clugston 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?

It _is_ necessary functionality.
Comparing truly unrelated pointers results in undefined behavior, this is not
different from normal non-ctfe code - i don't see a reason to even bother with
implementing any restrictions. It's undefined, but not unsafe - so the
programmer gets to deal with it.

artur


More information about the Digitalmars-d mailing list