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.

--

Reply via email to