Как получить предупреждение при переопределении виртуального метода с неправильной видимостью

При переопределении виртуального метода я заметил, что когда я делаю ошибку в видимости (защищенный метод переопределяется как открытый метод), компилятор не предупреждает меня.

Это правильный C ++, но обычно это ошибка.

Например:

#include <iostream>

class Base
{
protected:
  virtual void ProtectedMethod(void)
  {
    std::cout << "Base::ProtectedMethod" << std::endl;
  }
};

class Derived : public Base
{
public:
  virtual void ProtectedMethod(void)
  {
    std::cout << "Derived::ProtectedMethod" << std::endl;
  }
};

int main(int, char* [])
{
  Derived d;
  d.ProtectedMethod();
}

Я безуспешно пытался скомпилировать с помощью gcc и clang, с помощью -Wall -Wextra. Я запустил CppCheck для этого кода, но все равно не повезло.

Какой инструмент может помочь мне обнаружить это? Мне нужно исправить все исходные коды библиотеки, над которой я работаю.

9
задан Lightness Races with Monica 7 October 2011 в 13:27
поделиться