[Issue 15626] New: extern(C++) calling crash
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Fri Jan 29 19:37:52 PST 2016
    
    
  
https://issues.dlang.org/show_bug.cgi?id=15626
          Issue ID: 15626
           Summary: extern(C++) calling crash
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: blocker
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: turkeyman at gmail.com
Created attachment 1581
  --> https://issues.dlang.org/attachment.cgi?id=1581&action=edit
test case
D:
------------------
module lib;
extern(C++) class C
{
}
extern(C++) interface I
{
    void f();
}
extern(C++) abstract class BaseImpl(C, I) : I
{
    C instance;
}
// Bonus points: this is extern(C) because the C++ mangler doesn't work on this
type.
extern(C) void test(BaseImpl!(C, I) impl)
{
    impl.f();
}
C++:
------------------
#include <stdio.h>
class C
{
};
class I
{
  virtual void f() = 0;
};
template <typename C, typename I>
class BaseImpl : public I
{
  C *pInstance = (C*)(size_t)0xBAADF00D;
};
class Impl : public BaseImpl<C, I>
{
  void f() override final
  {
    printf("!!");
  }
};
extern "C" {
  extern void test(BaseImpl<C, I> *pImpl);
}
void main()
{
  Impl *i = new Impl;
  test(i);
}
--
    
    
More information about the Digitalmars-d-bugs
mailing list