title: Officially, what is typename for?
body: <p>On occasion I've seen some really indecipherable error messages spit out by <code>gcc</code> when using templates... Specifically, I've had problems where seemingly correct declarations were causing very strange compile errors that magically went away by prefixing the <code>typename</code> keyword to the beginning of the declaration... (For example, just last week, I was declaring two iterators as members of another templated class and I had to do this)...</p>
  
  <p>What's the story on <code>typename</code>? </p>