title: Determine if callable object has template arguments
body: <p>Is it possible to determine if the first argument of a callable object (function, lambda expression, functor, etc.) depends on a template parameter? For example: (using a hypothetical type trait)</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  template &lt;typename T&gt;
  void f1(T x) {}
  
  void f2(int x) {}
  
  int main() {
      auto f3 = [](auto x) {};
  
      std::cout &lt;&lt; std::boolalpha
                &lt;&lt; is_first_arg_generic&lt;decltype(f1)&gt;::value &lt;&lt; std::endl
                &lt;&lt; is_first_arg_generic&lt;decltype(f2)&gt;::value &lt;&lt; std::endl;
                &lt;&lt; is_first_arg_generic&lt;decltype(f3)&gt;::value &lt;&lt; std::endl;
  }
  </code></pre>
  
  <p>Outputs:</p>
  
  <pre><code>true
  false
  true
  </code></pre>