You can't.
Apparently the Standard does not see a reason to make it copyable, as it is just a temporary object to generate proper seed sequence out of small input. Why it is not moveable is a bit questionable, but probably the answer is within the same frame of reasoning as for the copy.
There are few workarounds though:
- Use the heap i.e. return a pointer to the seed sequence: - auto seq = std::make_unique<std::seed_seq> (/*...*/);
// ...
return seq;
 
- After generation, instead of returning the - std::seed_seqobject itself, just copy its content into another store.
 - std::seed_seq seq (/*...*/);
// ...
std::vector<std::seed_seq::result_type> seeds (seq.size ());
seq.param (seeds.begin ());
 
- The other way around. Store the input to - std::seed_seqinstead. That's what I did at the end. There is no real difference between whether you will keep what was stored or what you are going to store there - the Standard guarantees that. It is just that you can decide to do something with the seeds before passing them to- std::seed_seqe.g. setting them to concrete values for debug purposes.