#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;
}