If implementation limitations
prevent generating nondeterministic random numbers,
the implementation may employ a random number engine
.
class random_device {
public:
  
  using result_type = unsigned int;
  
  static constexpr result_type min() { return numeric_limits<result_type>::min(); }
  static constexpr result_type max() { return numeric_limits<result_type>::max(); }
  
  random_device() : random_device(implementation-defined) {}
  explicit random_device(const string& token);
  
  result_type operator()();
  
  double entropy() const noexcept;
  // no copy functions
  random_device(const random_device&) = delete;
  void operator=(const random_device&) = delete;
};