static if, static foreach, version and debug
27.1 static if
static if doesn't introduce a new scope, so declarations inside are visible outside.
void describe(T)(T x)
{
static if (is(T : long)) writeln("integral");
else static if (is(T : real)) writeln("floating");
else static if (isSomeString!T) writeln("string");
else static assert(0, "unsupported type " ~ T.stringof);
}27.2 static foreach
static foreach (i; 0 .. 3)
{
mixin("int field" ~ i.stringof ~ ";"); // generates field0, field1, field2
}
enum names = ["red", "green", "blue"];
static foreach (n; names)
{
mixin("void " ~ n ~ "() { writeln(\"" ~ n ~ "\"); }");
}27.3 Conditional Compilation: version and debug
version (Windows) { enum pathSep = '\\'; }
else version (Posix) { enum pathSep = '/'; }
else static assert(0, "unsupported OS");
version (X86_64) {} version (AArch64) {} version (LDC) {} version (DigitalMars) {} version (GNU) {}
version (unittest) {} version (assert) {} version (D_BetterC) {} version (D_NoBoundsChecks) {}
version (EnableLogging) writeln("log"); // dmd -version=EnableLogging
debug writeln("only with -debug");
debug (verbose) writeln("dmd -debug=verbose");