[resubmission of issue http://d.puremagic.com/issues/show_bug.cgi?id=506 as an enhancement.] static import and renamed import of a mixin don't work if the mixin itself has imports. This is a continuation of http://d.puremagic.com/issues/show_bug.cgi?id=498 which covers the basic import case. The fix for that however does not fix the static import and renamed import cases (import sigs=std.signals) cases. Here's examples: ------ import sigs=std.signals; class SigObj { mixin sigs.Signal!(); } void main() { } ---- static import std.signals; class SigObj { mixin std.signals.Signal!(); } void main() { }
cat > a.d << EOF module a; mixin template foo() { import std.stream; Stream stream; } EOF cat > b.d << EOF module b; static import impa=a; class Klass { mixin impa.foo!(); } EOF cat > c.d << EOF module c; static import a; class Klass { mixin a.foo!(); } EOF dmd -c b.d dmd -c c.d ----------
Got that bug report wrong the first time. Mixin templates are evaluated at instantiation scope. Libraries need to make sure that all their dependencies are self-contained, i.e. by import needed modules within the mixin or by combining templates and mixin templates.