У MSVC++ с версий 19.xx появилось предупреждение 4458 (declaration of '...' hides class member). Предупреждение полезное, но выводится, в том числе, и для
личных членов базовых классов, недоступных в текущем классе, чем сводит на нет всю инкапсуляцию:
class C1 {
int i1;
};
class C2 : public C1 {
int i2;
public:
int Get (int i1) const { return i1 + i2; }
};
Мне одному кажется, что в таком варианте от предупреждения нет ни малейшего смысла, а лишь сплошной вред?
Кстати, давно уже есть подозрение, что ключом /W4, не говоря уже о /Wall, в MS пользуется очень ограниченная группа людей (и преимущественно на тестовых примерах), а подавляющее большинство ограничивается максимум /W3. Иначе невозможно объяснить подобные казусы, а также то, что во многих случаях оборачивание проблемного фрагмента в __pragma (warning (push)), __pragma (warning (disable: ...)) и __pragma (warning (pop)) не позволяет подавить предупреждения — только глобальным запретом.