```
template<class RandomAccessIterator, class UniformRandomNumberGenerator>
void shuffle(RandomAccessIterator first,
RandomAccessIterator last,
UniformRandomNumberGenerator&& g);
```

*Effects:*
Permutes the elements in the range
[first,last)
such that each possible permutation of those elements has equal probability of appearance.

*Requires:*
RandomAccessIterator shall satisfy the requirements of
ValueSwappable ([swappable.requirements]).
The type
UniformRandomNumberGenerator shall meet the requirements of a uniform
random number generator ([rand.req.urng]) type whose return type is
convertible to
iterator_traits<RandomAccessIterator>::difference_type.

*Complexity:*
Exactly
(last - first) - 1
swaps.

*Remarks:*
To the extent that the implementation of this function makes use of random
numbers, the object g shall serve as the implementation's source of
randomness.