On Thursday, 16 January 2020 at 15:28:06 UTC, realhet wrote:
Update:
- All of the child classes needed to be marked with extern(C++)
- static class members are not supported, only __gshared static.
- passing a delegate to a constructor of this class expects a
(extern(C++) delegate) too.
- Internal compiler error: string[string] can not be mapped to
C++
So extern(C++) is not good in the current case.
The 3 latter points can be trivially worked around via extern(D):
extern(C++) class C
{
extern(D):
static int tlsGlobal;
this(void delegate()) {}
void foo(string[string] aa) {}
}
void main()
{
C.tlsGlobal = 123;
auto c = new C(() {});
c.foo(null);
}
I will not do any synchronization, but I think the GC will
crash upon releasing these objects.
Very likely.