Niall Douglas wrote:
I don't understand your objections, sorry.
Are you saying that the generators in <random> don't offer the ability to copy, serialize, deserialize and give identical output? Because they do.
They do within the same execution of a program, but not across executions, or across standard libraries, or across architectures. Given its simplicity, I have never understood how a linear congruential engine's state couldn't have been given that added guarantee.
Not sure what you're talking about, sorry. All that is guaranteed. E.g. https://godbolt.org/z/a17oboMMq #include <random> #include <sstream> #include <iostream> int main() { std::mt19937 e1( 5 ); std::stringstream ss; ss << e1; std::mt19937 e2; ss >> e2; std::cout << e1() << std::endl; std::cout << e2() << std::endl; } The output of this program is fully specified by the standard.
I came badly unstuck with mt19937 one time. On one architecture it was 20x slower AND produced completely different output for a specific seed.
Not much WG21 can do about that. It's just a buggy implementation.