class Mutable { public: virtual ~Mutable(); virtual void func(); }; Mutable::~Mutable() { } class DeriveMutable final : public Mutable { public: virtual ~DeriveMutable(); void func() override; }; DeriveMutable::~DeriveMutable() { } class Const { public: virtual ~Const(); virtual void func() const; }; Const::~Const() { } class DeriveConst final : public Const { public: virtual ~DeriveConst(); void func() const override; }; DeriveConst::~DeriveConst() { } void test23135() { DeriveMutable mut; mut.func(); DeriveConst cst; cst.func(); }