In reply to TC_2017:
I think you are confusing expression evaluation order with solver ordering. It might help to think about the exhaustive 65536 (216) possible value combinations for all these random variables, the solver and evaluates the constraint expression for each combination and builds a list of the 4096 possible combinations that satisfy the constraint expression. Each time you call randomize(), one of the 4096 possible solutions gets picked with equal probability.
The point of my presentation is that expressions gets evaluated the same regardless of being inside a constraint or not. The variables a and b get extended to the size of sum, but c and d do not get extended because they are both the same size and not in the context of any other expression. (c < d) gets evaluated first because of the parentheses and because addition associates left to right.