El generador de números pseudoaleatorios da la misma primera salida pero luego se comporta como se esperaba

Usando la clase aleatoria y una semilla de tiempo (NULL), la distribución uniforme siempre da la misma primera salida, incluso con diferentes compilaciones, pero después de que la primera salida se comporte como cabría esperar que se comportara un generador de números pseudoaleatorio.

¿Esto es por construcción, o lo estoy usando incorrectamente?

MWE:

#include <ctime>
#include <iostream>
#include <random>

using namespace std;

default_random_engine gen(time(NULL));
uniform_int_distribution<int> dist(10,200);

int main()
{
    for(int i = 0; i < 5; i++)
        cout<<dist(gen)<<endl;

    return 0;
}

Las primeras tres veces que ejecuté este programa obtengo resultados de:

57
134
125
136
112

Antes del segundo intento, decidí eliminar la línea vacía entreuniform_int_distribution yint main() solo para ver si la semilla se basó en el tiempo de compilación, como puede ver, eso no importó.

57
84
163
42
146

Solo corriendo de nuevo:

57
73
181
160
46

Así que en mis carreras sigo obteniendo57 primero, que por supuesto no es el fin del mundo, si quiero diferentes salidas puedo tirar la primera salida. Pero pone en tela de juicio si esto es así por diseño (si es así, ¿por qué?) O si estoy usando mal el generador de alguna manera (si es así, ¿cómo?).

Respuestas a la pregunta(3)

Su respuesta a la pregunta