Edited at

gccをwindowsで使うならstd::random_deviceを使ってはいけない

More than 3 years have passed since last update.

gccのstd::random_deviceはwindowsではmt19937、linuxまたはosxでは/dev/urandomを使っています。

mt19937を使う場合、シードはtokenパラメータで決めます。

std::random_device("mt19937")ならシードは5489に固定され、

std::random_device("12345")ならシードは12345になります。

でもtokenを数値にすると一部のシステムで例外がスローされます。

結論からするとstd::random_deviceは使わないのが吉です。

最初からmt19937を使うか、自分でラッパー関数を書くかにするべきです。

ソースコード

https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/src/c%2B%2B11/random.cc

https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/tr1/random.h

ちなみにlibc++はrand_sを使っています。

https://github.com/llvm-mirror/libcxx/blob/master/src/random.cpp