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


Walter Bright

Source: staticcond.d

  • Declaration

    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

    Return Value

    true if evaluates to true

  • Declaration

    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

    Return Value

    formatted string or null if the expressions were null, or if the instantiated expression is not based on the original one