xxxxxxxxxx
module test;
import core.stdc.stdlib, core.stdc.string, core.stdc.stdio;
import ldc.attributes;
extern(C++) class C
{
int data = 123;
int foo() { return data; } // virtual
}
pragma(mangle, "test.C.__init")
extern(C) __gshared void* C__init;
C makeC()
{
void* init = cast(void*) &C__init;
printf("init: %p\n", init);
version(D_BetterC) {} else printf("actual: %p\n", typeid(C).initializer().ptr);
enum size = __traits(classInstanceSize, C);
void* p = malloc(size);
memcpy(p, init, size);
return cast(C) p;
}
extern(C) int main()
{
auto c = makeC();
printf("c.foo() = %d\n", c.foo());
return 0;
}