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