A bug quite hard to summarize understandably. The code may help: -- module aliasesType; alias int myAlias; -- module definesType; import aliasesType; import usesType; // creates the import cycle typedef myAlias myTypedef; -- module usesType; import definesType; template T(x) {} // just use T with myTypedef somehow, doesn't matter what this is mixin T!(myTypedef); -- Compiling the definesType module results in the error "definesType.d(5): Error: identifier 'myAlias' is not defined". Using the fully qualified name "aliasesType.myAlias" instead fixes this error.
Did some more testing, and apparently it doesn't matter whether either is specifically a typedef or an alias.
I could not reproduce this bug with DMD 1.047 and DMD 2.032.
Right you are, this seems to have been fixed at some point.