Reply to Steven, > If I have a log object, and that log object is supposed to evaluate > its arguments only if the logging level allows it, checked at runtime. > as a bit of an aside: this can be done using lazy void Log(uint level)(lazy char[] str) { if(current > level) RealLog.output(str()); } alias Log!(Critical) CriticalLog; ... alias Log!(Debug) DebugLog;