Semicolones en una definición de clase

Estaba leyendo este gotw y aquí hay una muestra de código desde allí:

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

La pregunta era: ¿cuántos errores debería dar un compilador compatibl

Respondí uno, porque este código es equivalente a

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

Y estaba pensando que un punto y coma después de una definición de función estática sería un error. Pero el Sr. Sutter dice 0 y explica (aparte de las cosas que entiendo) que

l punto y coma "extra" se permite al final de una declaración de función.

Mi pregunta es

¿Qué texto en el estándar permite esto? ¿Esto se refiere solo a las funciones de los miembros?

Puede aparecer un punto y coma entre dos miembros o en cualquier otro lugar en una definición de clase como en

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta