prefer std::default_random_engine