title: Strong typedefs
body: <p>Is there any way to make a complete copy of a type so that they can be distinguished in template deduction context? Take the example:</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  template &lt;typename T&gt;
  struct test
  {
      static int c()
      { 
          static int t = 0;
          return t++;
      }
  };
  
  typedef int handle;
  
  int main()
  {
      std::cout &lt;&lt; test&lt;int&gt;::c() &lt;&lt; std::endl;
      std::cout &lt;&lt; test&lt;handle&gt;::c() &lt;&lt; std::endl;
      return 0;
  }
  </code></pre>
  
  <p>Since typedef only makes an alias for a type, this prints 0, 1 
  instead of the desired 0, 0. Is there any workaround for this?</p>