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.

Reply via email to