https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105701

            Bug ID: 105701
           Summary: Warn about unused initializer for virtual base
           Product: gcc
           Version: 12.1.1
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: enhancement
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

struct Base
{
  Base() { }
  Base(int) { }
  virtual void f() = 0;
};

struct Abstract : virtual Base
{
  Abstract(int i) : Base(i) { }
};

struct Concrete : Abstract
{
  Concrete() : Abstract(1) { }

  void f() override { }
};


A user on IRC suggested we should warn about the Base(i) initializer in the
Abstract(int) constructor. That class can never be constructed, so it can never
initialize the virtual base.

IIUC that is true even if the derived class does 'using Abstract::Abstract;' so
I don't think there's any way for that Base(i) to ever be used.

Reply via email to