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