Reading C++ Templates: The Complete Guide and it says
Note that templates cannot be declared in a function
It does not give e
The answer "because standard says so", is of course correct, but let's consider generic lambdas.
In C++14 and C++17 generic lambdas are the only way of writing template-like code that I know of:
auto lambda = [](auto x) { };
lambda.operator()(0);
Technically, you can write any kind of template code just with that. Though you'll have to work hard to work around various limitations of this approach.
That will be simpler in C++20 though. With template parameter list in generic lambdas you will be able to write code like this:
auto size = []() { return sizeof(T); };
static_assert(4 == size.operator()());
GCC already supports this syntax.