We don't need typename without template parameters

And in this context T1, etc are macro parameters, not template
parameters.

This should fix some warnings with clang, some errors with older gcc,
and some buildbot regressions.
Don't instantiate for std::complex<int>

We need int factor specializations for disambiguating some code, but
nobody's going to create a complex<int> literal by accident, and
disabling that method is easier than figuring out a good way to work
around the lack of a standard C++ conversion from complex<int> to
complex<Real>
Force static_cast<T>

This shouldn't hurt precision (since we're incrementing a type T) and
it fixes the "C++ doesn't know how to combine int with complex<Real>"
bugs for me.