次のコードをコンパイルすると、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 で同じ宣言をコメント解除すると、警告が閉じられることに注意してください。私の理解では、2 つの get() 関数は異なるシグネチャを持っているため、非表示にすることはできません。
クランは正しいですか?なんで?
これは、最近のバージョンの Xcode を実行している MacOS X 上にあることに注意してください。
clang --version
Apple LLVM version 5.0 (clang-500.1.74) (based on LLVM 3.3svn)
更新: Xcode 4.6.3 と同じ動作。