Requires:RandomAccessIterator shall satisfy the requirements of
ValueSwappable ([swappable.requirements]).
The type
remove_reference_t<UniformRandomBitGenerator>
shall meet the requirements of a
uniform random bit generator ([rand.req.urng]) type whose return type is
convertible to
iterator_traits<RandomAccessIterator>::difference_type.
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.