 +    return rand_r(&seed_);
 +  }
 +
-+  result_type min() { return std::numeric_limits<result_type>::min(); }
-+
-+  result_type max() { return std::numeric_limits<result_type>::max(); }
++  static constexpr result_type min() {
++    return std::numeric_limits<result_type>::min();
++  }
++
++  static constexpr result_type max() {
++    return std::numeric_limits<result_type>::max();
++  }
 +
 + private:
 +  // Avoid a system call like time() since this may be used before system calls

 #include <utility>
 #include <string.h>
 #include <stdlib.h>
@@ -43,6 +48,33 @@
 
 extern int EDMM_supported;
 

 /*
  * This function is equivalent to __builtin_rdrand16/32/64_step() except it
  * returns the random value instead of writing it to memory, which is required
@@ -51,9 +87,13 @@
 template <class R = unsigned>
 inline R rdrand(void)
 {
