#include <iostream>
#include <stdexcept>

using namespace std;

template <class T> class Array
{
private:
    T* data;
	unsigned int size;

public:
	Array<T> (unsigned int x)
	{
		size = x;
	}
	
	const T& operator[] (int index) const
	{
		if (index < 0||index >= size )
			throw domain_error("Array index out of bounds");
		return data[index];
	}

	unsigned int getSize ()  { return size; }

	void add (const T&, int index)
	{
		if (index < 0 || index >= size)
			throw domain_error("Array index out of bounds");
		else
			data[index] = T();
	}

	
	void display ()
	{
		cout << "[" << data[0];
		for (int i = 1; i < size ; ++i)
			cout << " , " <<data[i];
		cout << "]" << endl;
	}
	
};

int main ()
{
	Array<int> arr(10);

	for (int i = 0; i <(int)arr.getSize(); ++i)
		arr.add(i,i);

	arr.display();
        cout << arr[0] << endl;

	return 0;
}