fork(1) download
  1. #include <random>
  2. #include <iostream>
  3.  
  4. template<typename T>
  5. class Random
  6. {
  7. public:
  8. Random(const T& min, const T& max)
  9. : mUnifomDistribution(min, max)
  10. {}
  11. Random(const Random<T>&) = delete;
  12. Random(const Random<T>&&) = delete;
  13. Random<T>& operator = (const Random<T>&) = delete;
  14. T operator()()
  15. {
  16. return mUnifomDistribution(mEngine);
  17. }
  18.  
  19. private:
  20. std::default_random_engine mEngine{ std::random_device()() }; // <-- here the doubt - is it seeding?
  21. template <typename T>
  22. static auto dist() -> typename std::enable_if<std::is_integral<T>::value, std::uniform_int_distribution<T>>::type;
  23.  
  24. template <typename T>
  25. static auto dist() -> typename std::enable_if<std::is_floating_point<T>::value, std::uniform_real_distribution<T>>::type;
  26. using type = decltype(dist<T>());
  27. type mUnifomDistribution;
  28. };
  29.  
  30. int main()
  31. {
  32. ::Random<int> getRandom(0, 9);
  33. for (int i = 0; i<9; ++i)
  34. std::cout << getRandom() << '\n';
  35. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:21:15: error: declaration of ‘class T’
     template <typename T>
               ^
prog.cpp:4:10: error:  shadows template parm ‘class T’
 template<typename T>
          ^
prog.cpp:24:15: error: declaration of ‘class T’
     template <typename T>
               ^
prog.cpp:4:10: error:  shadows template parm ‘class T’
 template<typename T>
          ^
stdout
Standard output is empty