Onde o qualificador 'override' combina com os tipos de retorno à direita?

C ++ 11 tem o novooverride qualificador que pode ser aplicado a funções-membro para afirmar que elas substituem uma função virtual na classe base. O C ++ 11 também permite tipos de retorno à direita para que as funções possam ser declaradas comoauto f() -> return_type. Quando eu combino esses dois recursos, não sei seoverride vai antes ou depois do->.

Por exemplo, suponha que tenhamos a seguinte classe base:

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

As duas possibilidades para uma classe derivada são:

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

ou

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

g ++ 4.7.1 compila a primeira versão, mas falha no segundo com

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

Considerando clang ++ 4.0 compila o segundo, mas falha no primeiro com

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; }

Qual desses compiladores está realmente fazendo a coisa certa de acordo com o padrão?

Editar: Como Kerrek SB observa, isso éum bug no gcc (link do Bugzilla).

questionAnswers(2)

yourAnswerToTheQuestion