title: In-class initialization of static data members
body: <p>In C++, <code>static</code> members may not be initialized in the class body with these exceptions:</p>
  
  <ul>
  <li><code>static</code> members of <code>const</code> integral type <strong>can</strong> be</li>
  <li><code>static</code> members of <code>constexpr</code> literal type <strong>must</strong> be</li>
  </ul>
  
  <p>Can you explain why these exceptions? </p>
  
  <p>Also, this holds:</p>
  
  <blockquote>
    <p>Even if a <code>const static</code> data member is initialized in the class body, that member ordinarily should be defined outside the class definition.</p>
  </blockquote>
  
  <p>This I never understood at all. What's the point of this extra definition?</p>
  
  <p>Just trying to get some intuitions here.</p>