digitalmars.D.bugs - [Issue 18888] New: extern(C++) template arg/alias arg mangling issue
- d-bugmail puremagic.com (48/48) May 20 2018 https://issues.dlang.org/show_bug.cgi?id=18888
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: nobody puremagic.com Reporter: turkeyman 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? --
May 20 2018