Meta programming in D
Implementing guards in D
import std.stdio; bool guarded( lazy void cmd, bool delegate()[] guards ...){ bool lazyOr= false; foreach( g; guards) { if( lazyOr |= g()) break; } bool yn= !lazyOr; if( yn) cmd(); return yn; } bool guard( lazy bool exp, lazy void action){ bool yn= exp; if( yn) action(); return yn; } void main(){ int i=2; guarded( { writefln("yes"); writefln("must i"); }(), guard( i==0, writefln("null")), guard( i==1, writefln("one")) ); }