C++で乱数の配列を生成しようとしています。

以下のようなコードを書いてみたのですが、配列の内容が毎回同じになってしまいます。generate_array() の呼び出しで rng の内部状態は更新されるはずだと思うのですが、実際にはそうなっていないように見えます。なぜこのような挙動になるのでしょうか?

#include <algorithm>
#include <functional>
#include <random>
#include <iostream>

using namespace std;

default_random_engine rng;

void print_array(const int* ary, size_t n)
{
    for(size_t i = 0; i < n-1; ++i)
        cout << ary[i] << (i==n-1 ? "" : " ");
    cout << "\n";
}

void generate_array(int* ary, size_t n)
{
    uniform_int_distribution<int> dist;
    auto gen = bind(dist,rng);
    generate(ary, ary+n, gen);
}

int main()
{
    random_device rd;
    rng.seed(rd());

    constexpr int N = 10;
    int ary[N];

    fill(ary, ary+N, 0);
    print_array(ary, N);

    generate_array(ary, N);
    print_array(ary, N);
    generate_array(ary, N);
    print_array(ary, N);

    return 0;
}

wandbox上での実行結果を示します:
https://wandbox.org/permlink/RVHGTKCvVtfmS04F

なお、bind(dist,rng) の直前に dist(rng) の呼び出しを入れるとなぜか意図した通りの動作になります:
https://wandbox.org/permlink/LwQjAjxhDJBqDvuI