It seems pure ain't so pure after all

Tommi tommitissari at hotmail.com
Thu Oct 4 00:49:28 PDT 2012


On Tuesday, 2 October 2012 at 01:00:25 UTC, Walter Bright wrote:
>
> Since all you need to do to guarantee compile time evaluation 
> is use it in a context that requires CTFE, which are exactly 
> the cases where you'd care that it was CTFE'd, I just don't see 
> much utility here.

I suppose the most common use case would be efficient struct 
literals which are essentially value types but have non-trivial 
constructors.

struct Law
{
     ulong _encodedId;

     this(string state, int year) @aggressive_ctfe
     {
         // non-trivial constructor sets _encodedId
         // ...
     }
}

Policy policy = getPolicy();

if( policy.isLegalAccordingTo(Law("Kentucky", 1898)) )
{
     // ...
}

I think the function attribute would be the most convenient 
solution.


> Note that it is also impossible in the general case for the 
> compiler to guarantee that a specific function is CTFE'able for 
> all arguments that are also CTFE'able.

I'll have to take your word for it for not knowing enough 
(anything) about the subject.


More information about the Digitalmars-d mailing list