clang видає попередження при складанні наступного коду:
struct Base
{
virtual void * get(char* e);
// virtual void * get(char* e, int index);
};
struct Derived: public Base {
virtual void * get(char* e, int index);
};
Попередження:
warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual]
(згадане попередження, звичайно, слід увімкнути).
Я не розумію чому. Зауважте, що не коментуючи ту саму декларацію в Base, попередження замикається. Я розумію, що оскільки дві функції get () мають різні підписи, приховування бути не може.
Кленг правий? Чому?
Зверніть увагу, що це на MacOS X, на якій запущена остання версія Xcode.
clang --version
Apple LLVM version 5.0 (clang-500.1.74) (based on LLVM 3.3svn)
Оновлення: однакова поведінка з Xcode 4.6.3.
get
елемент функції одним аргументом для об'єкта статичного типуDerived
. Без декларації використання те саме призвело б до помилки компіляції.