https://issues.dlang.org/show_bug.cgi?id=18888
Issue ID: 18888 Summary: extern(C++) template arg/alias arg mangling issue Product: D Version: D2 Hardware: All OS: Windows Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: turkey...@gmail.com This C++ code: ------------------------------------------ template <typename T> struct TemplateName { void fun() {} }; template <template<typename> typename blah = TemplateName> struct Str { using I = TemplateName<blah<int>>; }; Str<>::I s; ------------------------------------------ Produces the symbol: ?fun@?$TemplateName@U?$TemplateName@H@@@@QEAAXXZ The equivalent D code makes a mistake with the alias argument: ------------------------------------------ extern (C++) struct TemplateName(T) { void fun(); } extern (C++) struct Str(alias blah = TemplateName) { alias I = TemplateName!(blah!int); } pragma(msg, Str!().I.fun.mangleof); ------------------------------------------ Prints: ?fun@?$TemplateName@U?$blah@H@@@@QEAAXXZ Notice that the name of the alias parameter `blah` ends up in there, rather than the template it is an alias of? --