title: Access to private static function during static member initialization
body: <p>I have a class with a static member. This will be initialized using a private static function of the same class. </p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  
  class A
  {
  public:
      static std::string const s;
  
  private:
      static std::string make()
      {
          return "S";
      }
  };
  
  std::string const A::s = A::make();
  
  int main()
  {
      std::cout &lt;&lt; A::s &lt;&lt; std::endl;
      // std::cout &lt;&lt; A::make() &lt;&lt; std::endl; // &lt;-- Does not work
      return 0;
  }
  </code></pre>
  
  <p>My question is: Because of which rule is this allowed? Clearly the commented part does not work, because I am not allowed to access a private function from outside the class. So why is the initialization of the private static member during startup a special case? (And on a side note: what is the intention of this rule? Is it to allow this exact case?)</p>
  
  <p>I am aware of other mechanisms to initialize a static member (like here: <a href="https://stackoverflow.com/questions/185844/initializing-private-static-members">Initializing private static members</a>). But in my case the member is const, so as far as I know the only way to set it is via direct initalization at the place of definition.</p>