GCC пропускает предупреждение «скрытая перегруженная виртуальная функция» - PullRequest
1 голос
/ 26 сентября 2019

Я случайно удалил квалификатор const из реализации производного класса виртуального метода.Я обычно использую Clang, который выдает предупреждение об этом.Когда я переключился на gcc с Wall, это осталось совершенно незамеченным.Почему это?Вот мой файл:

$ cat main.cpp
#include <iostream>

class Father {
public:
    virtual int get() const { return 8; }
};

class Son : public Father {
public:
    virtual int get() /* const */ { return 6; }
};

int main(int argc, char **argv)
{
    Father *f = new Son;
    std::cout << f->get() << "\n";
    return 0;
}

А вот выходы компиляции для gcc и clang:

$ clang++ -Wall main.cpp -o main
main.cpp:10:14: warning: 'Son::get' hides overloaded virtual function
      [-Woverloaded-virtual]
        virtual int get() /* const */ { return 6; }
                    ^
main.cpp:5:14: note: hidden overloaded virtual function 'Father::get' declared
      here: different qualifiers ('const' vs unqualified)
        virtual int get() const { return 8; }
                    ^
1 warning generated.

И

$ g++ -Wall main.cpp -o main
$ ./main
8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...