On Wednesday, 23 September 2015 at 14:01:11 UTC, Steven
Schveighoffer wrote:
If the base ctor doesn't call any virtual functions, when it's
constructed doesn't really matter.
1. In D members are virtual by default, so the virtuality can be
a mistake.
2. In D/C++ you can do full override of virtual members, that
means that enforcing semantics are delegated to documentation and
code review. This is a flaw inherited from Simula.
I don't see how you come to that conclusion. The derived class
must control construction of the base class.
No, this is not how it is done in Simula/Beta. The construction
is controlled from the base classes and follows the inheritance
chain.
Doing construction in the opposite direction is a C++ flaw,
probably related to C.
But neither C/C++ are good role models when it comes to typing.
It requires slightly more careful thought (and some rules from
the compiler), but it scales just fine.
I don't think it scales "just fine". OO in C++ does not scale
fine either. If you easily can break the super-class semantics in
a sub-class then it does not scale. Alias this suffers from
similar issues.