Sorry, I thought my comment came out a bit too judgmental, so I nuked it. (I was saying that templates were mostly useful as simple parameterization, and that the only reason to master this stuff was to read other people's code.)
The key here is to be objective, not falling on a flame thread. C++ templates are ugly, I'm agree, but they are useful and heavily used. Lets make them simple to use with some abstractions.