I'm surprised at how weak Microsoft's compiler is.
I was only able to achieve 442 recursive template instantiations. Any more and it would crash with an internal error:

Code:
template<int N> struct TemplateTest
{
	static const int value = typename TemplateTest<N - 1>::value;
};

template<> struct TemplateTest<0>
{
	static const int value = 0;
};

int main()
{
	cout << TemplateTest<442>::value; // Works
	cout << TemplateTest<443>::value; // Crashes
}