title: Best introduction to C++ template metaprogramming?
body: <p>Static metaprogramming (aka "template metaprogramming") is a great C++ technique that allows the execution of programs at compile-time.  A light bulb went off in my head as soon as I read this canonical metaprogramming example:</p>
  
  <pre><code>#include &lt;iostream&gt;
  using namespace std;
  
  template&lt; int n &gt;
  struct factorial { enum { ret = factorial&lt; n - 1 &gt;::ret * n }; };
  
  template&lt;&gt;
  struct factorial&lt; 0 &gt; { enum { ret = 1 }; };
  
  int main() {
      cout &lt;&lt; "7! = " &lt;&lt; factorial&lt; 7 &gt;::ret &lt;&lt; endl; // 5040
      return 0;
  }
  </code></pre>
  
  <p>If one wants to learn more about C++ static metaprogramming, what are the best sources (books, websites, on-line courseware, whatever)?</p>