Yep, but does it not just come from the fact that the template 'sub-language' is Turing-complete? Obviously you can write stuff that will never terminate.
Well, exactly, but the point is that C++ templates were not designed to be Turing-complete and that they were came as a complete surprise to the community and language committee when it was pointed out in 1994, five years after templates were introduced in CFront 2.0 and the Annotated Reference Manual in 1989.
I don't myself object to compile-time Turing completeness (and potential non-termination). What I object to is
1) having to do it using awful syntax and semantics compared to the base language, and
2) the performance being many orders of magnitude worse than implementing the same algorithm in the base language
This is something Lisp macros have had right for half a century, and if the Lisp implementation is JITed then so are the macros.
Historically, it has been generally much better engineering in the C/C++ world to have the build process compile and run some C code that processes some input file in a DSL and outputs C code that is then #included in some other C code.
Having the ability to indicate that certain functions can be used at compile time is good if they are compiled/JITed. Are they, in GCC/Clang? I don't know. I haven't actually followed that stuff.