title: How to hide an implementation helper template?
body: <p>Suppose that I have two template functions declared in a header file:</p>
  
  <pre><code>template &lt;typename T&gt; void func1(const T&amp; value);
  template &lt;typename T&gt; void func2(const T&amp; value);
  </code></pre>
  
  <p>And suppose that the implementation of these functions (also in a header file and not in a source file, because they are templates) uses some implementation helper function, which is also a template:</p>
  
  <pre><code>template &lt;typename T&gt; void helper(const T&amp; value) {
      // ...
  }
  
  template &lt;typename T&gt; void func1(const T&amp; value) {
      // ...
      helper(value);
  }
  
  template &lt;typename T&gt; void func2(const T&amp; value) {
      // ...
      helper(value);
  }
  </code></pre>
  
  <p>In any source file that I include the header file, the helper function will be visible. I don't want that, because the helper function is just an implementation detail. Is there a way to hide the helper function?</p>