¿A dónde va el calificador de "anulación" con los tipos de retorno finales?

C ++ 11 tiene el nuevooverride calificador que se puede aplicar a las funciones miembro para afirmar que anulan una función virtual en la clase base. C ++ 11 también permite tipos de retorno finales para que las funciones se puedan declarar comoauto f() -> return_type. Cuando combino ambas características, no sé sioverride va antes o después de la->.

Por ejemplo, supongamos que tenemos la siguiente clase base:

struct Base {
    virtual auto f () const -> int = 0;
};

Las dos posibilidades para una clase derivada son:

struct Derived : public Base {
    virtual auto f () const override -> int { return 0; } // Compiles on g++ 4.7.1
};

o

struct Derived : public Base {
    virtual auto f () const -> int override { return 0; } // Compiles on clang++ 4.0
};

g ++ 4.7.1 compila la primera versión pero falla en la segunda con

test.cpp:6:30: error: expected ';' at end of member declaration
test.cpp:6:34: error: 'override' does not name a type

mientras que clang ++ 4.0 compila el segundo pero falla en el primero con

test.cpp:6:11: error: 'auto' return without trailing return type
  virtual auto f () const override -> int { return 0; }
          ^
test.cpp:6:3: error: only virtual member functions can be marked 'override'
  virtual auto f () const override -> int { return 0; }
  ^                       ~~~~~~~~
test.cpp:6:35: error: expected ';' at end of declaration list
  virtual auto f () const override -> int { return 0; }

¿Cuál de estos compiladores está haciendo lo correcto de acuerdo con el estándar?

Editar: Como señala Kerrek SB, esto esun error en gcc (enlace Bugzilla).

Respuestas a la pregunta(2)

Su respuesta a la pregunta