It's strange that in std.random we have no constraints for templates which take a random number generator. Shouldn't we have an `isRandomNumberGenerator` trait? Or at least isInputRange? For example, this compiles:

```D
import std.random;

void main()
{
    enum E { a, b, c }
    int x;
    auto res = uniform!E(1);
}
```

What exactly does this do?