I could share my random code.
The function names are a little long but everything works as expected. I use PCG as a generator rather than boost.
The ranges are inclusive. Which means when selecting by index from a container you'll want to do size() - 1 in the max field.
Unity3D does the opposite and uses an exclusive range. Which is quite annoying when you're rolling for things other than indices to access containers. (it excludes the max not the min parameter. )
I have a function in my random code that seeds the rng. the first parameter is a bool, where true means use a random device. The second parameter, let's you set a specific seed. But it also has a default seed so you can just seedTheRng(false).
This allows a simple edit in source to change the random from using a fixed seed each startup to something that doesn't.
OOP is a bullshit choice for getting random numbers. It's better to have copies of the seeds and reseed the generator than to have multiple generator objects hanging around. Although I haven't looked that much under the hood of PCG, maybe it handles copying and references to a generator quite optimally.
Either way no one wants a generator object to take a shit on their beautiful code with it's ugly presence. So we create non-member functions to wrap-up the presence of what's being used.
As for all this hotbits nonsense I have a function that can test if the random output is working as expected.
(Windows for example will output 0,1,0,1,0,1 or just all 0s, if it cannot find a random device. But don't take my word for it.)
This isn't the same as knowing if the entropy collected is fresh or "there". But I suggest just doing a quick test if the values have gone to hell.
If entropy is being pissed away so fast that you need to constantly monitor it, you need to learn to use it better.
source for the PCG, they have a C implementation too. Reminder it's a generator not a way to access any random device.
http://www.pcg-random.org/