title: the return type of decltype(function_name) is totally useless?
body: <pre><code>void foo(int a) {
      cout &lt;&lt; "Hello" &lt;&lt; a &lt;&lt; '\n';
  }
  </code></pre>
  
  <p>according to rule of decltype, the type of decltype(foo) should be "void foo(int)",
  but it seems we can do nothing with it:</p>
  
  <pre><code>void (&amp; f_ref)(int) = foo;
  void (* f_ptr)(int) = foo;
  
  
  cout&lt;&lt;is_same_v&lt;decltype(foo), decltype(f_ref)&gt;&lt;&lt;endl; //return 0
  cout&lt;&lt;is_same_v&lt;decltype(foo), decltype(f_ptr)&gt;&lt;&lt;endl; //return 0
  decltype(foo) df;
  df = foo;    //error: assignment of function ‘void df(int)’
  df = &amp;foo;   //error: assignment of function ‘void df(int)’
  
  decltype(foo) df{foo}; //error: function ‘void df(int)’ is initialized like a variable
  decltype(foo) df{&amp;foo}; //error: function ‘void df(int)’ is initialized like a variable
  </code></pre>