#include <iostream>
using namespace std;
/* Array.h*/
template<size_t n, typename T>
class Array
{
static unsigned __freeId, __quantity;
unsigned _id;
T* _array;
public:
Array(void);
~Array(void);
T& operator[](const size_t);
};
/* Array.cpp */
template<size_t n, typename T>
Array<n, T>::Array(void)
: _id(++__freeId), _array(new T[n]) {
}
template<size_t n, typename T>
Array<n, T>::~Array(void) {
delete[] _array;
}
template<size_t n, typename T>
T& Array<n, T>::operator[](const size_t i) {
return _array[i];
}
/* Main.cpp */
template<> unsigned Array<7, int>::__freeId = 0;
template<> unsigned Array<7, int>::__quantity = 0;
int main() {
Array<7, int> a;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLyogQXJyYXkuaCovCgp0ZW1wbGF0ZTxzaXplX3QgbiwgdHlwZW5hbWUgVD4KY2xhc3MgQXJyYXkKewogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBfX2ZyZWVJZCwgX19xdWFudGl0eTsKICAgICAgICB1bnNpZ25lZCBfaWQ7CgogICAgICAgIFQqIF9hcnJheTsKcHVibGljOgogICAgICAgIEFycmF5KHZvaWQpOwogICAgICAgIH5BcnJheSh2b2lkKTsKICAgICAgICBUJiBvcGVyYXRvcltdKGNvbnN0IHNpemVfdCk7Cn07CgovKiBBcnJheS5jcHAgKi8KCnRlbXBsYXRlPHNpemVfdCBuLCB0eXBlbmFtZSBUPgpBcnJheTxuLCBUPjo6QXJyYXkodm9pZCkgCiAgICA6IF9pZCgrK19fZnJlZUlkKSwgX2FycmF5KG5ldyBUW25dKSB7Cn0KCnRlbXBsYXRlPHNpemVfdCBuLCB0eXBlbmFtZSBUPgpBcnJheTxuLCBUPjo6fkFycmF5KHZvaWQpIHsKICAgIGRlbGV0ZVtdIF9hcnJheTsKfQoKdGVtcGxhdGU8c2l6ZV90IG4sIHR5cGVuYW1lIFQ+ClQmIEFycmF5PG4sIFQ+OjpvcGVyYXRvcltdKGNvbnN0IHNpemVfdCBpKSB7CiAgICByZXR1cm4gX2FycmF5W2ldOwp9CgovKiBNYWluLmNwcCAqLwoKdGVtcGxhdGU8PiB1bnNpZ25lZCBBcnJheTw3LCBpbnQ+OjpfX2ZyZWVJZCA9IDA7CnRlbXBsYXRlPD4gdW5zaWduZWQgQXJyYXk8NywgaW50Pjo6X19xdWFudGl0eSA9IDA7CgppbnQgbWFpbigpIHsKICAgIEFycmF5PDcsIGludD4gYTsKCXJldHVybiAwOwp9