The last changes to range

Simen kjaeraas simen.kjaras at gmail.com
Mon May 31 21:00:06 PDT 2010


Philippe Sigaud <philippe.sigaud at gmail.com> wrote:

>>> OK. I really like this possibility to test for members and activate  
>>> them
>>> when possible. Maybe it could be abstracted away into a Select-like
>>> template?
>>>
>>
>> More detail please.
>>
>
> It's just that my code is full of these static ifs. They are clear but  
> I'd
> like two things:
>
>
> IfPossible!(someCode);            // static if (is( typeof())) or
> __traits(compiles, someCode), then someCode. It's becoming  a chore to
> repeat twice the same line.
>
>
> and:
>
>
> ConditionalCode!(cond1, code1,       // static if cond1 then code1
>                                    cond2, code2,      // else static if
> cond2 then code2
> ...
>                                    optionalDefaultCode);
>
>
> But I have no solution except by using q{} strings... Maybe with lazy
> void()?

I see a solution to this in template lambdas.

mixin template ifPossible( alias code ) {
   static if ( __traits( compiles, code ) ) {
     mixin code;
   }
}

mixin ifPossible!( !{ fn( d ); } );

Where !{} is the syntax for an inline-specified template, i.e. a
template lambda.

Not sure it is worth adding to the language, but I have occasionally
wanted it.

-- 
Simen


More information about the Digitalmars-d mailing list