struct Base { virtual auto f () const -> int = 0; }; struct Derived : public Base { virtual auto f () const -> int override { return 0; } }; int main() { Derived d; } The above fails to compile. Errors: error: expected ';' at end of member declaration error: 'override' does not name a type Both errors are reported for the definition of Derived::f. According to the standard, section 8.4.1 Function definitions have the form function-definition: attribute-specifier-seqopt decl-specifier-seqopt declarator virt-specifier-seqopt function-body The declarator in a function-definition shall have the form D1 ( parameter-declaration-clause ) cv-qualifier-seqopt ref-qualifieropt exception-specificationopt attribute-specifier-seqopt trailing-return-typeopt Since the declarator includes the trailing return type, I believe the above should compile. If the override specifier is moved before the -> the code does compile, but that doesn't jive with the standard.
The example works in 4.8 HEAD.
Indeed it does.