Как заставить GCC информировать меня о переопределении функций-членов с другой подписью?
Я портирую большой проект на Android.Из-за различий в диалектах M $ VC и GCC я добавил несколько const
модификаторов для параметров функции.(А именно, когда вы звоните func(MyClass(something))
, M $ в порядке с MyClass&
, в то время как GCC требует const MyClass&
.)
Суть в том, что при изменении подписи BaseClass::func()
вы не получаете предупрежденияо наличии другой подписи для DerivedClass::func()
.
Вот небольшая программа, показывающая, что происходит:
#include <stdio.h>
class Value {
int x;
public:
Value(int xx):x(xx){}
};
class Base {
public:
virtual void f(const Value&v) {printf("Base\n");}
};
class First: public Base {
public:
virtual void f(Value&v) {printf("First\n");}
};
class Second: public Base {
public:
virtual void f(Value&v) {printf("Second\n");}
};
int main() {
Value v(1);
First first;
Second second;
Base*any;
any = &first;
any->f(v);
any->f(Value(2));
first.f(v);
//first.f(Value(3)); // error: no matching function for call to
First::f(Value)
}
Когда я компилирую и запускаю ее, я получаю:
$ g++ -Wall -Wextra inher2.cpp
inher2.cpp:10:18: warning: unused parameter ‘v’
inher2.cpp:15:18: warning: unused parameter ‘v’
inher2.cpp:20:18: warning: unused parameter ‘v’
$ ./a.out
Base
Base
First
$
(gcc прав насчет неиспользуемого параметра, но он не имеет значения.)
Итак: Как заставить GCC информировать меня о переопределении функций-членов с другой сигнатурой?