#include <iostream>

template <unsigned long size>
struct BigObject
{
	unsigned long array[size * size];
	BigObject<size - 1> object;
};


template <>
struct BigObject<0>
{
	unsigned long array[1];	
};

BigObject<900>& recurse(BigObject<900>& object1, unsigned long n)
{
	if (n == 0)
	{
		return object1;
	}

	BigObject<900> object;

	return recurse(object, n);
}

int main(int argc, char const *argv[])
{
	BigObject<900> object;
	recurse(object, 20);

	std::cout << sizeof(object) << std::endl;
	return 0;
}