In reply to Jung Ik Moon:
This is an area of the LRM that needs some work and I hope to get to some of this in the next revision that just being started.
The LRM currently says
Constraints can be any SystemVerilog expression with variables and constants of integral type (e.g., bit, reg, logic, integer, enum, packed struct).
But then later section 18.5.13 Constraint guards clearly shows the use of other types being used on non-random state variables.
Another issue with the LRM and your example is the use of a random variable as an index to an unpacked array.