# dmd.staticcond

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

#### Authors

Walter Bright

#### License

Boost License 1.0

Source: staticcond.d

Documentation: https://dlang.org/phobos/dmd_staticcond.html

Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/staticcond.d

- `evalStaticCondition`

  #### 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.

  #### Parameters

  `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`

- `visualizeStaticCondition`

  #### 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.

  #### Parameters

  `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