#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';
}
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKYXV0byBjb3VudGVyKCkgewogICAgaW50IGkgPSAwOwogICAgcmV0dXJuIFtpID0gc3RkOjptYWtlX3NoYXJlZDxpbnQ+KCBpICkgXSB7CiAgICAgICAgcmV0dXJuICsrKCppKTsKICAgIH07Cn0KCmludCBtYWluKCkgewogICAgYXV0byBmID0gY291bnRlcigpOwogICAgYXV0byBnID0gY291bnRlcigpOwoKICAgIGludCBhcnJbXSA9IHsKICAgICAgIGYoKSwKICAgICAgIGcoKSwKICAgICAgIGcoKSwKICAgICAgIGYoKQogICAgfTsKCiAgICBmb3IoIGF1dG8gaSA6IGFyciApIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgaSA8PCAnXG4nOwogICAgfQp9Cg==