https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95641
Bug ID: 95641 Summary: Bogus error message in the class base specifier Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: haoxintu at gmail dot com Target Milestone: --- This code bug.cc class A {}; class B : virtual class A{}; In gcc-trunk $g++ -c bug.cc bug.cc:2:19: error: expected class-name before ‘class’ 2 | class B : virtual class A{}; | ^~~~~ bug.cc:2:19: error: expected ‘{’ before ‘class’ bug.cc:2:25: error: redefinition of ‘class A’ 2 | class B : virtual class A{}; | ^ bug.cc:1:7: note: previous definition of ‘class A’ 1 | class A {}; | ^ bug.cc:2:1: error: multiple types in one declaration 2 | class B : virtual class A{}; | ^~~~~ There are four error messages, I guess some of them are bogus. I tested bug.cc in other compilers, and they only give one message. In clang : "error: expected class name", In icc : "error: expected an identifier", In msvc : " error C2518: keyword 'class' is invalid in a base class list; expected a class name". Reproduced in Godbolt : https://godbolt.org/z/KuEPNF