When allocating a C++ class instance with the constructor defined in C++, the wrong object address is used:
// testcpp.cpp
class Cpp
{
public:
Cpp();
virtual void foo() {}
int x;
};
Cpp::Cpp()
{
x = 42;
}
// testd.d
extern(C++)
{
class Cpp
{
public:
this();
void foo();
int x;
}
}
void main()
{
Cpp c = new Cpp;
assert(c.x == 42);
}
The assertion fails for OSX and FreeBSD, but not on Windows and Linux. This happens because the constructor does not return 'this' on the former platforms.
Comment #1 by robert.schadek — 2024-12-13T18:59:09Z