From my reading of the standard, random_device::entropy() should return 0.0 if a software engine is used. However, in VS2010 it returns 32.0, which in my understanding requires hardware to produce non-deterministic random numbers.
How does VS2010’s random_device generate the number sequence?
According to a comment left on this question by Hans Passant,
random_deviceusesadvapi32:SystemFunction036, which according to MSDN is an alias forRtlGenRandom. This is verified by the runtime library source provided with VC++ 2010:random_device::operator()()in<random>calls the following chain of functions:According to a comment left by Michael Howard on one of his blog articles, "Cryptographically Secure Random number on Windows without using CryptoAPI",
RtlGenRandomuses the following:There’s a full explanation (including diagrams) in Chapter 8 of Writing Secure Code, 2nd Edition.