When something is "Turing-Complete", that means it is capable of computing
anything that is computable. And yep, there are things that are not
computable, ever, no matter how much processing power you have. Have you
ever heard of the halting problem? That is the classic example of something
that simply cannot be computed, period.
An example of something that is not Turing-Complete is a simple finite state
machine.
The term comes from Turing Machines, which are a well-known and simple
theoretical machine in Computer Science. Their elegance comes from the fact
that they can indeed compute anything that is computable, yet are very
simple machines.
In terms of this thread, template metaprogramming being Turing-Complete
means that you can compute anything that is comoutable using only template
metaprogramming techniques. There is nothing the full C++ language can do
computationally that can't be done just with template metaprogramming!
Although, programs that are purely metaprograms would be horrendous to read
and understand if they did anything non-trivial! Template metaprogramming
tends to get very ugly from a syntactic point of view...
Of course, as another poster pointed out, there is no I/O system built up
around template metaprogramming, so that makes it largely useless as a
general-purpose programming language (even if one were willing to put up
with the syntax), but that is a separate issue - that doesn't change the
fact that, computationally, template metaprogramming is capable of handling
any computable problem.
Another practical problem with template metaprogramming is that any
non-trivial metaprogram would likely involve very deep recursive template
instantiation, which would blow an internal limit in most compilers. But
again, this does not change the fact that, from a theoretical point of view,
template metaprogramming can compue anything that is computable (have I used
that phrase enough???!!!
)...
Hope that clears it up!
Dave