https://issues.dlang.org/show_bug.cgi?id=12575
Andrej Mitrovic <andrej.mitrov...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |andrej.mitrov...@gmail.com --- Comment #1 from Andrej Mitrovic <andrej.mitrov...@gmail.com> --- Technically they are part of a "namespace", since you can disambiguate them: ----- mixin template T1() { extern(C) void fizzle() { } } mixin template T2() { extern(C) void fizzle() { } } mixin T1!() t1; mixin T2!() t2; void main() { t1.fizzle(); t2.fizzle(); } ----- So I guess that's why they're mangled. As a workaround you can use this: ----- mixin template T() { // or just pragma(mangle, "fizzle"), but this will at least error if // you change the function name pragma(mangle, __traits(identifier, fizzle)) extern(C) void fizzle(); } mixin T!(); void main() { fizzle(); } ----- --