I was reading [this gotw](http://www.gotw.ca/gotw/086.htm) and here's a code sample from there:

```
struct X {
  static bool f( int* p )
  {
    return p && 0[p] and not p[1:>>p[2];
  };
};

```

The question was: how many errors should a compliant compiler give:

I answered one, because this code is equivalent to

```
struct X {
  static bool f( int* p )
  {
    return p && p[0] && ! p[1] > p[2];
  };
};

```

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

> 
> The "extra" semicolon is allowed at
>  the end of a function declaration.
> 
> 
> 

My question is:

* What text in the standard allows this?
* Does this refer to member functions only?
* Can a semicolon appear between two members or in any other place in a class definition as in

```
 struct X
 {
   int a;;;;int b; //Legal?
 };

```