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_seq
object 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_seq
instead. 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_seq
e.g. setting them to concrete values for debug purposes.