Static constructor call ordering in imported modules

Dmitry Olshansky dmitry.olsh at gmail.com
Sun Aug 8 12:12:47 PDT 2010


On 08.08.2010 22:55, Andrej Mitrovic wrote:
> Here's an example from TDPL (with writeln's) with two modules:
>
> -------------------------------------
> module MA;
>
> import std.stdio;
> import MB;
>
> class A
> {
>      static this()
>      {
>          writeln("A's constructor called.");
>      }
> }
>
> void main()
> {
> }
> -------------------------------------
>
> -------------------------------------
> module MB;
>
> import std.stdio;
>
> class B
> {
>      static this()
>      {
>          writeln("B's constructor called.");
>      }
> }
> -------------------------------------
>
> Compiling and running this examples gives this output:
> B's constructor called.
> A's constructor called.
>
>
> But, according to TDPL, page 189, it states:
>
> "MA imports MB. Then A's static class constructors run before B's"
>
> I've tried using a driver module which imports MA and then MB, but as long as MA itself imports MB then I still get the same output. Error in text / in DMD?
>    
In text I guess - consider A static constructor uses class B that is in  
MB (as it can, but not the other way around).
MA should have B's static constructor called, or all sorts of trouble come.

-- 
Dmitry Olshansky



More information about the Digitalmars-d mailing list