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 }