On Sunday, 22 September 2013 at 21:18:13 UTC, Michael wrote:
This:
//----
   auto eventObserver =  new Event!DelegateType();
//----
Does not do what you think it does: It *statically* initializes "eventObserver" to the *single* "new Event!DelegateType();". SO basically, all your instances are sharing the same Event.

I'm surprised this compiles at all, what with Fire.init depending on a run-time call, but apparently, dmd is "smart enough" to do the allocation at compile time.

Why like "static"?

Because that is the definition of inline initialization. Basically, every type (struct/class) has a ".init" state, which is a compile-time known static initial value.

So when you write "auto a = new A;" It means a resolves to the *value* which is the result of "new A". This is not to be confused with the *expression*.

In any case, I think the code is wrong to begin with, since you are basically using a non shared to access a non-TLS global.

I'm filing a bug report right now.

Reply via email to