Mixin operator 'if' directly
    Basile B. 
    b2.temp at gmx.com
       
    Sat Dec 22 16:45:54 UTC 2018
    
    
  
On Saturday, 22 December 2018 at 10:11:23 UTC, bauss wrote:
> On Saturday, 22 December 2018 at 03:44:09 UTC, Timoses wrote:
>>
>> Awesome hack!
>> Being a hack, it would be even nicer if it worked ouf of the 
>> box:
>>
>>     mixin template foo(bool b)
>>     {
>>         int _impl() { writeln(b); return int.init; }
>>         int _ipml2 = _impl();
>>     }
>>
>> vs
>>
>>     mixin template foo(bool b)
>>     {
>>         writeln(b);
>>     }
>
> I think this is the closest we can come to it:
>
> mixin template Execute(alias p)
> {
>     auto __execute__()
>     {
>         p();
>
>         return 0;
>     }
>     auto __unused__ = __execute__();
> }
>
> mixin template MyTemplate(int a)
> {
>     mixin Execute!({
>         import std.stdio : writeln;
>         writeln(a);
>     });
> }
>
> void main()
> {
>     mixin MyTemplate!10;
> }
One more line can be saved using a lambda to wrap the alias:
     template ExpressionStatement(alias p)
     {
         const __unused__ = {p(); return 0;}();
     }
Also i prefer the name `ExpressionStatement` to `Execute` because 
this describes exactly what the template does and define its 
limits at the same time.
And congrats to Neia Neutuladh for this find.
    
    
More information about the Digitalmars-d-learn
mailing list