title: Meaning of default initialization changed in C++11?
body: <p>C++2003 8.5/5 says:</p>
  
  <blockquote>
    <p>To <em>default-initialize</em> an object of type T means:</p>
    
    <p>— if T is a non-POD class type (clause 9), the default constructor for T is called (and the initialization is
    ill-formed if T has no accessible default constructor);</p>
    
    <p>— if T is an array type, each element is default-initialized;</p>
    
    <p>— otherwise, the object is <strong>zero-initialized</strong>.</p>
  </blockquote>
  
  <p>[Emphasis added.]</p>
  
  <p>The C++2011 standard changed that last item to</p>
  
  <blockquote>
    <p>— otherwise, <strong>no initialization is performed</strong>.</p>
  </blockquote>
  
  <p>This seems like it would be a breaking change for some programs.  Was this intentional?</p>
  
  <p><strong>Edit</strong></p>
  
  <p>Here's some code to motivate this question:</p>
  
  <pre><code>class Foo {
    public:
      Foo() : m_values() {}
  
      int m_values[3];
  };
  </code></pre>
  
  <p>Before C++11, I thought the explicit mention of <code>m_values</code> in the default constructor would <em>default-initialize</em> that array.  And since the elements of the array are scalar, I expected that to mean the values were all set to 0.</p>
  
  <p>In C++11, it seems there's no longer a guarantee that this will happen.  But maybe, as Mooing Duck pointed out in the comments, perhaps this is no longer a case of default initialization but some other form which preserves the expected behavior.  Citations welcome.</p>