#include <memory>
#include <iostream>

auto counter() {
    int i = 0;
    return [i = std::make_shared<int>( i ) ] {
        return ++(*i);
    };
}

int main() {
    auto f = counter();
    auto g = counter();

    int arr[] = {
       f(),
       g(),
       g(),
       f()
    };

    for( auto i : arr ) {
        std::cout << i << '\n';
    }
}
