Requires:RandomAccessIterator shall satisfy the
Cpp17ValueSwappable requirements ([swappable.requirements]).
The type
remove_reference_t<UniformRandomBitGenerator>
shall satisfy 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.