On 10/12/13 08:44, Jonathan M Davis wrote:
Yeah. Something like that.

What I like is that it actually comes out slightly nicer than the existing code -- you don't need an extra static boolean to check if the RNG has been initialized. This experience is proving typical of class-based RNG and RNG-dependent code so far.

I think I was misled by the "Only const or immutable ..." part of the error
message: I'd assumed that any class that actually modified its internal
state would be disallowed as a static instance.

It's a matter of what you can directly initialize a non-local variable with.
Module-level variables, static variables, and member variables all have to be
known at compile time, and you can't have a mutable class instance being
constructed at compile time and then kept around until runtime.

That's obvious in retrospect but not on the basis of the error message:

Error: variable std.random2.generator.rndGen.result is mutable. Only const or immutable class thread local variable are allowed, not std.random2.generator.MersenneTwisterEngine!(uint, 32, 624, 397, 31, 2567483615u, 11, 4294967295u, 7, 2636928640u, 15, 4022730752u, 18, 1812433253u).MersenneTwisterEngine

Would this be better?

    Cannot initialize thread-local class variable %s with a mutable value.  Only
    const or immutable initial values are allowed (e.g. null).

Reply via email to