#include <iostream>
using namespace std;
template < class Count >
struct Counter {
using count_type = Count;
count_type instances = 0;
template <Counter& c>
struct Counted {
using id_type = count_type;
id_type id;
Counted() : id(c.instances) { ++c.instances; }
~Counted() { --c.instances; }
friend std::ostream& operator<<(std::ostream& os, const Counted& lol) {
os << "printing inner " << lol.id;
return os;
}
};
};
using SCounter = Counter<std::size_t>;
SCounter sc;
using SCounted = SCounter::Counted<sc>;
int main() {
// your code goes here
SCounted i, j, k; // --> ok, works fine
std::cout << j << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPCBjbGFzcyBDb3VudCA+CnN0cnVjdCBDb3VudGVyIHsKCXVzaW5nIGNvdW50X3R5cGUgPSBDb3VudDsKCWNvdW50X3R5cGUgaW5zdGFuY2VzID0gMDsKCQoJdGVtcGxhdGUgPENvdW50ZXImIGM+CglzdHJ1Y3QgQ291bnRlZCB7CgkJdXNpbmcgaWRfdHlwZSA9IGNvdW50X3R5cGU7CgkJaWRfdHlwZSBpZDsKCQlDb3VudGVkKCkgOiBpZChjLmluc3RhbmNlcykgeyArK2MuaW5zdGFuY2VzOyB9CgkJfkNvdW50ZWQoKSB7IC0tYy5pbnN0YW5jZXM7IH0KCQkKCQlmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IENvdW50ZWQmIGxvbCkgewoJCQlvcyA8PCAicHJpbnRpbmcgaW5uZXIgIiA8PCBsb2wuaWQ7CgkJCXJldHVybiBvczsKCQl9Cgl9Owp9OwoKdXNpbmcgU0NvdW50ZXIgPSBDb3VudGVyPHN0ZDo6c2l6ZV90PjsKU0NvdW50ZXIgc2M7CnVzaW5nIFNDb3VudGVkID0gU0NvdW50ZXI6OkNvdW50ZWQ8c2M+OwoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglTQ291bnRlZCBpLCBqLCBrOyAvLyAtLT4gb2ssIHdvcmtzIGZpbmUKCXN0ZDo6Y291dCA8PCBqIDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9