www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18888] New: extern(C++) template arg/alias arg mangling issue


          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);

?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