On Thursday, 28 March 2013 at 11:52:26 UTC, Don wrote:

Yes, it currently evaluates it top to bottom.

As long as all the static if's in question are in a single scope. Here dmd evaluates the second (nested) static if before the first one:

  static if (S.a) static assert (S.a);

  struct S {
    static if (true) const bool a = true;
  }

An algorithm has been discussed which would remove that restriction; your example would then compile. It's difficult to implement though. It has to deal with paradoxes:

static if (!is(typeof(x)) int y = 1;
static if (!is(typeof(y)) int x = 1;

Who wins?

Nice example! Shouldn't the compiler report errors when it detects kind of 'circular dependency' between the names occurring in static if conditions and the ones declared in their bodies?

Artur

Reply via email to