I'm not in the habit of reading the standard, but Stroustrup's C++ Programming Language is usefully precise.
A.9 Templates: gives the grammar for template declaration; the type-parameter is one of class, typename, or another template - so the type is known, static. (it's not dynamic. one could imagine giving a typeinfo object if C++ were a dynamic language. But that wasn't your question.)
C.13.8.3 Point of Instantiation Binding: says that the point of instantiation for a template is just before the declaration using it.
The example given is concerned with resolving names in the template definition to the correct scope. This would be very hard to do at run-time!
e.g. from Stroustrup C.13.8.3:
template<class T> void f(T a) { g(a); }
void g(int);
void h()
{
extern g(double);
f(2);
}
"Here the point of instantiation for f is just before h(), so the g() called in f() is the global g(int) rather than the local g(double)."
I guess this doesn't rule out JIT, but as a practical matter, instantiating the template f requires knowing the correct scoped resolution of g at a particular line. As Jonathan says, you'd need the compiler's services as part of the run-time, along with the full context built up in the compiler while compiling that unit. If that's not a "compile-time" job, I don't know what is.
EDIT:
This all relies on an antique version of the C++ standard.