On Tuesday, 4 April 2023 at 07:08:52 UTC, Chris Katko wrote:
dscanner reports this as a warning:
```D
struct foo{
this()
{
/* some initial setup */
refresh();
}
void refresh() { /* setup some more stuff */}
// [warn] a virtual call inside a constructor may lead to
unexpected results in the derived classes
}
```
Firstly, are all calls virtual in a struct/class in D? Is this
any different from C++?
Regarding this warning, the big difference between C++ and D
classes is that a D class object is of type Child its whole life
including during the Base class constructor execution. In C++ a
class object starts as Base, Base::constructor is executed, then
type is changed to Child (implemented by overwriting the vtable
pointer), then Child::constructor is executed.
-Johan