Поскольку C++ 11, std::shuffle()
принимает ссылку rvalue на генератор случайных бит:
template<class RandomIt, class URBG>
void shuffle(RandomIt first, RandomIt last, URBG&& g);
И поэтому я могу назвать это так:
std::vector<int> v = {...};
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
Это показывает ошибку в моем понимании C++, которую я не смог удовлетворить сегодня утром: что получается, используя ссылку rvalue здесь? Другими словами, почему это не
template<class RandomIt, class URBG>
void shuffle(RandomIt first, RandomIt last, URBG& g);