Static constructor call ordering in imported modules

Andrej Mitrovic andrej.mitrovich at gmail.com
Sun Aug 8 11:55:40 PDT 2010


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?


More information about the Digitalmars-d mailing list