https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79555
Bug ID: 79555 Summary: Warning 'base class should be explicitly initialized in the copy constructor' issued in wrong case Product: gcc Version: 7.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: reichelt at gcc dot gnu.org Target Milestone: --- The C++ front-end (with -Wextra enabled) complains about the following code snippet: ================================ struct A { A(); A(const A&); }; struct B : virtual A { B(const B&) {} // B(const B&) : A() {} virtual int foo() = 0; }; ================================ bug.cc: In copy constructor 'B::B(const B&)': bug.cc:9:3: warning: base class 'struct A' should be explicitly initialized in the copy constructor [-Wextra] B(const B&) {} ^ However, since the base class A is virtual and the class B itself is abstract, A isn't initialized in this function anyway (and so the warning is pointless). Even more annoying is the fact that other major compilers complain if you try to please GCC and initialize A (as in the comment line above): * clang with (clang++ -Wabstract-vbase-init -c): bug.cc:10:17: warning: initializer for virtual base class 'A' of abstract class 'B' will never be used [-Wabstract-vbase-init] * VisualStudio 2015 (cl -Wall) bug.cc(10): warning C4589: Constructor of abstract class 'B' ignores initializer for virtual base class 'A' bug.cc(10): note: virtual base classes are only initialized by the most-derived type So it would be nice to suppress the warning in this specific case.