title: Can I take the address of a function defined in standard library?
body: <p>Consider the following code:</p>
  
  <pre><code>#include &lt;cctype&gt;
  #include &lt;functional&gt;
  #include &lt;iostream&gt;
  
  int main()
  {
      std::invoke(std::boolalpha, std::cout); // #1
  
      using ctype_func = int(*)(int);
      char c = std::invoke(static_cast&lt;ctype_func&gt;(std::tolower), 'A'); // #2
      std::cout &lt;&lt; c &lt;&lt; "\n";
  }
  </code></pre>
  
  <p>Here, the two calls to <code>std::invoke</code> are labeled for future reference.
  The expected output is:</p>
  
  <pre><code>a
  </code></pre>
  
  <p>Is the expected output guaranteed in C++20? </p>
  
  <p>(Note: there are two functions called <code>tolower</code> &mdash; one in <code>&lt;cctype&gt;</code> and the other in <code>&lt;locale&gt;</code>. The explicit cast is introduced to select the desired overload.)</p>