Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


Lazily evaluate static conditions for static if, static assert and template constraints.

Source staticcond.d

bool evalStaticCondition(Scope* sc, Expression original, Expression e, out bool errors, Expressions* negatives = null);
Semantically analyze and then evaluate a static condition at compile time. This is special because short circuit operators &&, || and ?: at the top level are not semantically analyzed if the result of the expression is not necessary.
Scope* sc instantiating scope
Expression original original expression, for error messages
Expression e resulting expression
bool errors set to true if errors occurred
Expressions* negatives array to store negative clauses
true if evaluates to true
const(char)* visualizeStaticCondition(Expression original, Expression instantiated, const Expression[] negatives, bool full, ref uint itemCount);
Format a static condition as a tree-like structure, marking failed and bypassed expressions.
Expression original original expression
Expression instantiated instantiated expression
Expression[] negatives array with negative clauses from instantiated expression
bool full controls whether it shows the full output or only failed parts
uint itemCount returns the number of written clauses
formatted string or null if the expressions were null, or if the instantiated expression is not based on the original one