clang gibt beim Kompilieren des folgenden Codes eine Warnung aus:
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);
};
Die Warnung lautet:
warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual]
(Diese Warnung muss natürlich aktiviert sein).
Ich verstehe nicht warum. Beachten Sie, dass das Kommentieren derselben Deklaration in Base die Warnung beendet. Mein Verständnis ist, dass es kein Verstecken geben kann, da die beiden Funktionen get () unterschiedliche Signaturen haben.
Ist Klirren richtig? Warum?
Beachten Sie, dass dies unter MacOS X erfolgt und eine aktuelle Version von Xcode ausgeführt wird.
clang --version
Apple LLVM version 5.0 (clang-500.1.74) (based on LLVM 3.3svn)
Update: Gleiches Verhalten mit Xcode 4.6.3.
get
Funktionselement jetzt mit einem einzelnen Argument für ein Objekt vom statischen Typ aufrufenDerived
. Ohne die using-Deklaration würde dasselbe zu einem Kompilierungsfehler führen.