Timon Gehr wrote: > I am strongly in favor of disallowing any cases where mixin declarations > shadow declarations that were used to compute mixin declarations in a > scope that allows forward references. > > > Any thoughts on this?
Order-of-static-evaluation problems are not limited to mixins: static if (!is(typeof(foo)) enum bar = 1; static if (!is(typeof(bar)) enum foo = 1; with the way dmd handles forward references, this can go either way depending on which static if gets evaluated first. D's wish that 'the order of declarations does not matter' is impossible to fulfill due to mixins and static if. They are special because they can alter the symbol table based on the contents of the symbol table. I think you could get away with defining that 'the order of declarations does not matter - except for static if and mixin which always get evaluated in lexical order'. I'm not sure how much work it'd be to make dmd behave that way. It probably wouldn't be worthwile.
