Случайные числа в C ++ 11 и std :: bind взаимодействуют неожиданным образом

Я использую GCC 4.6.3 и пытался сгенерировать случайные числа с помощью следующего кода:

#include 
#include 

int main()
{
    std::mt19937 rng_engine;

    printf("With bind\n");
    for(int i = 0; i < 5; ++i) {
        std::uniform_real_distribution dist(0.0, 1.0);
        auto rng = std::bind(dist, rng_engine);
        printf("%g\n", rng());
    }

    printf("Without bind\n");
    for(int i = 0; i < 5; ++i) {
        std::uniform_real_distribution dist(0.0, 1.0);
        printf("%g\n", dist(rng_engine));
    }

    return 0;
}

Я ожидал, что оба метода сгенерируют последовательность из 5 случайных чисел. Вместо этого вот что я на самом деле получаю:

With bind
0.135477
0.135477
0.135477
0.135477
0.135477
Without bind
0.135477
0.835009
0.968868
0.221034
0.308167

Это ошибка GCC? Или это какая-то тонкая проблема, связанная с std :: bind? Если да, можете ли вы хоть как-то понять результат?

Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос