title: Semicolons in a class definition
body: <p>I was reading <a href="http://www.gotw.ca/gotw/086.htm" rel="nofollow noreferrer">this gotw</a> and here's a code sample from there:</p>
  
  <pre><code>struct X {
    static bool f( int* p )
    {
      return p &amp;&amp; 0[p] and not p[1:&gt;&gt;p[2];
    };
  };
  </code></pre>
  
  <p>The question was: how many errors should a compliant compiler give:</p>
  
  <p>I answered one, because this code is equivalent to</p>
  
  <pre><code>struct X {
    static bool f( int* p )
    {
      return p &amp;&amp; p[0] &amp;&amp; ! p[1] &gt; p[2];
    };
  };
  </code></pre>
  
  <p>And I was thinking that a semicolon after a static function definition would be an error. But Mr. Sutter says 0 and explains (apart from the things I do understand) that</p>
  
  <blockquote>
    <p>The "extra" semicolon is allowed at
    the end of a function declaration.</p>
  </blockquote>
  
  <p>My question is:</p>
  
  <ul>
  <li>What text in the standard allows this?</li>
  <li>Does this refer to member functions only?</li>
  <li><p>Can a semicolon appear between two members or in any other place in a class definition as in</p>
  
  <pre><code> struct X
   {
     int a;;;;int b; //Legal?
   };
  </code></pre></li>
  </ul>