On Tuesday, 22 September 2015 at 23:21:20 UTC, Steven Schveighoffer wrote:
Yeah, but you can't do this in C++ though:

class D : B {
   this()
   {
      writeln("derived is only now complete");
      super();
   }
}

I find the ability to control the construction order far more important than virtual calls for base constructors.

You could do it in old C++ compilers, and some have a permissive switch that allows you to do it, but you should not do it. It leads to incorrect initialization and breaks encapsulation (unsound typing). Forcing construction order is a Good Thing.

In Beta, the successor to Simula, all execution follows this pattern:

this(){
   begin_prepare_stuff();
   subclass.this();
   end_prepare_stuff();
}

This way the superclass defines what you can override which is better for correctness.

Reply via email to