title: Why use a "tpp" file when implementing templated functions and classes defined in a header?
body: <p>Please refer to the first answer in <a href="https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file">this question about implementing templates.</a></p>
  
  <p>Specifically, take note of this quote</p>
  
  <blockquote>
    <p>A common solution to this is to write the template declaration in a header file, then implement the class in an implementation file (<strong>for example .tpp</strong>), and include this implementation file at the end of the header.</p>
  </blockquote>
  
  <p>I bolded the part that I'm most interested in.<br>
  What's the significance of a .tpp file? I tried doing exactly what was suggested in that page and it worked. But then, I changed the file extension to any random gibberish (like .zz or .ypp) and it still worked! Is it supposed to work? Does it matter if it's .tpp or any other extension? And why not use a .cpp?</p>
  
  <p>Here's another thing I'm confused about.<br>
  If my implementations were written in a .cpp and the header defined non-templated functions, then I'd only need to compile the .cpp file once, right? at least until I changed something in the .cpp file.  </p>
  
  <p>But if I have a header defining templated functions and my implementations are in a file with a random funky extension, how is it compiled? And are the implementations compiled <em>every</em> time I compile whatever source code <code>#include</code>s said header?</p>