title: Implicit initialization of aggregate subpbject
body: <p>When looking at the initialization rules for aggregates in the N2310 I found the following paragraphs (emp. mine):</p>
  
  <p><code>6.7.9(p19)</code>:</p>
  
  <blockquote>
    <p>The initialization shall occur in initializer list order, each
    initializer provided for a particular subobject overriding any
    previously listed initializer for the same subobject; 154) <strong>all</strong>
    <strong>subobjects that are not initialized explicitly shall be initialized</strong>
    <strong>implicitly the same as objects that have static storage duration.</strong></p>
  </blockquote>
  
  <p><code>6.7.9(p21)</code>:</p>
  
  <blockquote>
    <p>If there are fewer initializers in a brace-enclosed list than there
    are elements or members of an aggregate, or fewer characters in a
    string literal used to initialize an array of known size than there
    are elements in the array, <strong>the remainder of the aggregate shall be</strong>
    <strong>initialized implicitly the same as objects that have static storage</strong>
    <strong>duration</strong>.</p>
  </blockquote>
  
  <p>It seems to me that <code>6.7.9(p19)</code> implies <code>6.7.9(p21)</code> (but not wise versa). For instance:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  
  struct test{
      int a;
      int b;
      int c;
  };
  
  int main(){
      struct test test = {
          .a = 123
      };
  
      printf("%d%d%d\n", test.a, test.b, test.c); //obviously, 12300 is printed
  }
  </code></pre>
  
  <p>I think this case can be explained by both <code>6.7.9(p19)</code> and <code>6.7.9(p21)</code></p>
  
  <p>What is the purpose of <code>6.7.9(p21)</code>? What did I miss?</p>