This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/54849] New: Override specifier with trailing return type
- From: "ashish.sadanandan at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 07 Oct 2012 17:42:30 +0000
- Subject: [Bug c++/54849] New: Override specifier with trailing return type
- Auto-submitted: auto-generated
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: unassigned@gcc.gnu.org
ReportedBy: ashish.sadanandan@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.