http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54849
Bug #: 54849 Summary: Override specifier with trailing return type Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: ashish.sadanan...@gmail.com 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.