Error en tiempo de ejecución en el programa compilado con MinGW gcc / g ++ (nuwen distro)

#include <iostream>
#include <random>

using namespace std;

class myclass
{
    private:

    static bool randomBit()
    {
        std::random_device rd; // Obtain a random seed number from hardware
        std::mt19937 gen(rd()); // Initialize and seed the generator <---- CRASH!!
        uniform_int_distribution<> distr(0, 1); // Define the distribution range

        return distr(gen);
    }

    myclass::myclass() = delete; // Disallow creating an instance of this object

    public:

    static bool generateRandomBit()
    {   
        return randomBit();
    }
};

int main()
{   
    cout<<myclass::generateRandomBit()<<endl;

    return 0;
}

Esto compila y se ejecuta sin problemas con MSVC. Se compila sin errores congcc pero elmt19937 gen(rd()); line hace que el programa se bloquee con el siguiente mensaje:

"myprog.exe ha dejado de funcionar

Un problema causó que el programa dejara de funcionar correctamente. Windows cerrará el programa y le notificará si hay una solución disponible ".

¿Algunas ideas

omando @gcc:g++ mycode.cpp -fpermissive -s -o myprog.exe

ACTUALIZAR Agregando-O2 al comando de compilación hace que el programa se ejecute, aunque de manera incorrecta. La función "aleatoria" ya no es aleatoria; siempre devuelve 1. Por ejemplo, probando con el siguiente código "principal" ...

int main()
{   
    int a[2] {0, 0};

    for (int i = 0; i < 1000; i++) {
        a[myclass::generateRandomBit()]++;
    }

    cout<<"<"<<a[0]<<", "<<a[1]<<">"<<endl;

    return 0;
}

... produce esta salida:<0, 1000>

Respuestas a la pregunta(1)

Su respuesta a la pregunta