dragonchild,
Sure
List::Util has
shuffle() but how does this meet the requirement. Perhaps I am misreading it or perhaps the root thread was updated after you replied but I believe the requirement also mandates that elements not remain in their original position. This is a derangement and I think that
Derangement of a list and
Derangements iterator are probably more applicable. I also see that
frenchtoast had the same idea elsewhere in the thread.