The different behavior of is() from bug 7868 depending on whether it was invoked from a static if condition or not might be acceptable, but this example is clearly a regression in my eyes: --- module a; struct A { import b : c; // Instantiate template which uses derivedMembers. alias D!A Test; // Unrelated template from other module - »not defined«. static if (c!()()) {} } // Just something using derivedMembers. template D(T) { mixin({ foreach (name; __traits(derivedMembers, T)) {} return ""; }()); } --- --- module b; bool c()() { return true; } --- It compiled fine in DMD 2.058, but fails with »template instance c!() template 'c' is not defined, did you mean a?« in latest Git master (7c22b8a), which is absolutely not related to the cause of the error.
Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/747e13608d4f50b6f57ef0bfe134cb62e1b0b7db fix Issue 7888 - derivedMembers forward reference error with nested imports
Commit pushed to dmd-1.x at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/9e13e3918bbec70a42812b791e1d5b90245244da fix Issue 7888 - derivedMembers forward reference error with nested imports