The syntax isn't what makes C++ templates hard. They're hard because they're templates.
However, they're powerful because of it. There's no "generics meta programming" because generics don't offer any sort of comparable power. That said, the reason template meta programming is so useful is because C++ lacks reflection.
I disagree. Take a look at D templates (and compile-time function evaluation) - that syntax will be easily readable to anyone familiar with a C family language, because it's the same syntax (just with 'static' or 'pure' peppered everywhere).
C++ template meta-programming is hard for two reasons. The first is that templates use a syntax of their own, which is one more thing to learn. The second is that the template language is functional, which is quite alien to most C++ programmers. D uses native D syntax to do the same thing (with the requirement that functions be pure), and that's much easier to read.