Cygwin x86_64-on-ARM64 環境で std::randon_device のコンストラクタを引数なしで呼び、rd() を呼ぶと発生する。
#include <random> int main(int argc, char** argv) { std::random_device rd; return rd(); }
$ ./a.exe terminate called after throwing an instance of 'std::runtime_error' what(): random_device: rdrand failed [1] 36278 abort ./a.exe
- GCC (libstdc++): "default" (デフォルト)、 "/dev/urandom" または "/dev/random"
デフォルトでは、CPU の RDRAND 命令が使用できれば ( _GLIBCXX_X86_RDRAND が定義されていれば) それを、そうでなければ /dev/urandom から値を取得する
Cygwin 向けの libstdc++ ではコンパイル時に rdrand が使えると判断されている模様。
当然ながらコンストラクタの引数に "/dev/urandom" とかを渡せば、x86_64-on-ARM64 環境 でもきちんと動作する。