title: Is a pointer to an array of unknown size incomplete?
body: <p>3.9/6 N3797:</p>
  
  <blockquote>
    <p>[...]</p>
    
    <p>The type of a pointer to array of unknown size, or of a type defined
    by a typedef declaration to be an array of unknown size, cannot be
    completed.</p>
  </blockquote>
  
  <p>It sounds like a pointer to an array of unknown size is an incomplete type. If so we couldn't define an object of a pointer to array of unknown size. But it is not true, because we can define an array of unknown bound. </p>
  
  <pre><code>#include &lt;iostream&gt;
  
  using std::cout;
  using std::endl;
  
  int (*a)[] = (int(*)[])0x4243afff;
  
  int main()
  {
  
  }
  </code></pre>
  
  <p>It compiles fine.</p>
  
  <p><strong><a href="http://coliru.stacked-crooked.com/a/8c055a33b64bd424" rel="nofollow">DEMO</a></strong></p>
  
  <p>We could't do it if it were incomplete type. Indeed:
  3.9/5:</p>
  
  <blockquote>
    <p>Objects shall not be defined to have an incomplete type</p>
  </blockquote>
  
  <p>The Standard previously defined an incomplete types as follows 3./5:</p>
  
  <blockquote>
    <p>A class that has been declared but not defined, an enumeration type in
    certain contexts (7.2), or an array of unknown size or of incomplete
    element type, is an incompletely-defined object type.
    Incompletely defined object types and the void types are incomplete
    types (3.9.1).</p>
  </blockquote>
  
  <p>Which means the pointer to an incomplete type is complete. Contradiction?</p>
  
  <p>So where I'm wrong in my reasoning?</p>