https://issues.dlang.org/show_bug.cgi?id=15473
--- Comment #3 from Manu <[email protected]> --- Here's another case: C++: ?CreateImplInternal@Component@ep@@IEAAPEAXU?$BaseString@D@2@U?$SharedMap@U?$AVLTree@UVariant@ep@@U12@U?$Compare@UVariant@ep@@@2@@ep@@@2@@Z D: ?CreateImplInternal@Component@ep@@IEAAPEAXU?$BaseString@D@2@U?$SharedMap@U?$AVLTree@UVariant@ep@@0U?$Compare@UVariant@ep@@@2@@ep@@@2@@Z The difference being that same little '0U' which is meant to be 'U12@U' again. C++ declaration: namespace ep { class Component : public RefCounted, public IComponent { void* CreateImplInternal(String ComponentType, Variant::VarMap initParams); }; } D declaration: extern (C++, ep) class Component : RefCounted, IComponent { void* CreateImplInternal(String componentType, Variant.VarMap initParams); } In both cases, the function involves, Variant::VarMap, which expands to: C++: ep::SharedMap<ep::AVLTree<ep::Variant, ep::Variant, ep::Compare<ep::Variant>>> D: SharedMap!(AVLTree!(Variant, Variant, Compare!Variant)) That's the same type as the return value in the first issue, with the same problem in the symbol name. This is a pretty long symbol name, but the missing 'U12@' seems deterministic. --
