On Sunday, 3 May 2015 at 09:28:40 UTC, Dennis Ritchie wrote:
On Sunday, 3 May 2015 at 09:04:07 UTC, tired_eyes wrote:
On Sunday, 3 May 2015 at 08:48:52 UTC, Dennis Ritchie wrote:
On Sunday, 3 May 2015 at 08:42:57 UTC, tired_eyes wrote:
Feels pretty silly, but I can't compile this:
import std.random;
auto i = uniform(0, 10);
DMD spits this:
/usr/include/dmd/phobos/std/random.d(1188): Error: static
variable initialized cannot be read at compile time
/usr/include/dmd/phobos/std/random.d(1231): called
from here: rndGen()
/usr/include/dmd/phobos/std/random.d(1231): called
from here: uniform(a, b, rndGen())
Perhaps I'm missing something obvious?
dmd 2.067.1, openSUSE 13.2 x64
void main() {
import std.random;
auto i = uniform(0, 10);
}
Not so simple, unfortunately.
Actual code:
import std.random;
struct Mystruct {
auto id = uniform(0, 10);
}
void main() {
// wahtever
}
..and no luck.
I think it is a bug:
No. The aboc code defines a field of Mystruct calld 'id', with a
type inferred from the static initializer expression 'uniform(0,
10)'. The problem is that a static initializer is... static! So
the expression must be evaluated at compile-time. The uniform
generator from std.random cannot be used at compile-time, thus
the error.
You could do:
---
import std.random;
struct Mystruct {
int id;
static opCall() {
Mystruct s;
s.id = uniform(0, 10);
return s;
}
}
void main() {
auto s = Mystruct();
// whatever
}
---