title: Template specialization using typedefs
body: <p>While learning Vulkan I came across some code in the VulkanCookbook. in the VulkanCookbook the author writes the code to import the Vulkan functions and classes by hand. Well I've been slowly converting it over to the LunarG's SDK for Vulkan and I came across a problem in the under 64bit VkFence it typedef'd to VkFence_T* which is fine and all but in 32bit it's typedef'd as uint64_t which causes a problem for VkDestroyer which uses code similar to below  </p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;stdint.h&gt;
  
  typedef uint64_t A;
  typedef uint64_t B;
  
  template&lt;typename T&gt;
  class Handler
  {
      void DestroyObject( T parent );
  };
  
  template&lt;&gt;
  inline void Handler&lt;A&gt;::DestroyObject(A object) {
    std::cout &lt;&lt; "destroy type A" &lt;&lt; std::endl;
  }
  
  template&lt;&gt;
  inline void Handler&lt;B&gt;::DestroyObject(B object) {
    std::cout &lt;&lt; "destroy type B!" &lt;&lt; std::endl;
  }
  
  int main()
  {}
  </code></pre>
  
  <p>is there any good way to handle this problem or do I have to go and rework all the example code to delete Objects by hand? I would like to compile under 32bit if possible.</p>
  
  <p>Sorry if this question has been asked somewhere else I couldn't find it as google always came partial templating and other non-related topics. And I do understand the problem with the code the compiler is looking at _A and _B and just treating it a uint64_t without caring that they are named differently, which causes the DestroyObject overloads to be for the same template type causing the redefinition error.</p>
  
  <p>Edit: fixed the code using invalid naming as that wasn't actually a core problem.</p>