title: How to pass a template function in a template argument list
body: <p>Suppose I have a <code>template</code> function:</p>
  
  <pre><code>template&lt;typename T&gt;
  T produce_5_function() { return T(5); }
  </code></pre>
  
  <p>How can I pass this entire <code>template</code> to another <code>template</code>?</p>
  
  <p>If <code>produce_5_function</code> was a functor, there would be no problem:</p>
  
  <pre><code>template&lt;typename T&gt;
  struct produce_5_functor {
    T operator()() const { return T(5); }
  };
  template&lt;template&lt;typename T&gt;class F&gt;
  struct client_template {
    int operator()() const { return F&lt;int&gt;()(); }
  };
  int five = client_template&lt; produce_5_functor &gt;()();
  </code></pre>
  
  <p>but I want to be able to do this with a raw function template:</p>
  
  <pre><code>template&lt;??? F&gt;
  struct client_template {
    int operator()() const { return F&lt;int&gt;(); }
  };
  int five = client_template&lt; produce_5_function &gt;()();
  </code></pre>
  
  <p>I suspect the answer is "you cannot do this".</p>