У меня возникают проблемы с выводом на печать устаревших предупреждений для функций, объявленных как виртуальные.
Я использую "g ++ (GCC) 4.1.1 20061011 (Red Hat 4.1.1-30)".
Мои исследования показывают, что в gcc 4.x могут быть проблемы с устареванием
чисто виртуальные функции (т.е. класс bueller {virtual int cameron () = 0;};),
но не ... я думаю, вы бы назвали их обычными ... виртуальными функциями.
Просто мы на одной странице ...
foo.h
class Foo
{
void Foo_A() __attribute__((deprecated)); //non-virtual
virtual void Foo_B() __attribute__((deprecated)); //virtual
virtual void Foo_C() __attribute__((deprecated)) = 0; //pure virtual
};
Скажем, я скомпилировал это, файл foo.cpp и некоторый файл main.cpp, используя g ++.
1) Все, что использует Foo_A (), действительно будет показывать предупреждение.
2) Все, что использует Foo_B (), НЕ показывает предупреждение.
3) Все, что наследует Foo, реализует Foo_C и затем использует его, не отображает предупреждение.
Номер 1: все работает, без проблем.
Номер 3: похоже на известную ошибку / функцию ... что угодно ..
Похоже, что нет объяснения №2.
Возможно, это связано с № 3, хотя ничего из того, что я нашел, не упоминает об этом.
Кто-нибудь знает, если я что-то здесь упускаю в отношении обычных функций-членов виртуального класса, которые я хочу исключить?
Кстати: -Wno-deprecate НЕ включен в моих make-файлах.