次の規格は適合していますか?セクションを引用できますか? warning C4505: unreferenced local function has been removed
:仮想関数は、基本クラスの同じ名前の非仮想関数をオーバーライドしますか?
struct A
{
virtual void func() = 0;
};
struct B
{
void func(){}
};
struct C : public A, public B
{
virtual void func(){ B::func(); }
};
私は、派生クラスで最もfunc
の宣言を指していると等価が、より複雑なコードでVS2010での奇妙なコンパイラの警告を取得しています。私は、コンパイラがクラス内で宣言された仮想関数がローカルであると考える理由を知らない。しかし私は簡単な例でその警告を再現することはできません。
編集:
私は警告のための小さなREPROケースを考え出しました。私はそれが関数の隠蔽に関連していると仮定して、間違った経路を辿っていたと思う。
template<typename T>
struct C
{
int GetType() const;
virtual int func() const; // {return 4;} // Doing this inline removes the warning <--------------
};
template<typename T>
int C<T>::GetType() const
{
return 0;
}
template<>
int C<int>::GetType() const
{
return 12;
}
template<typename T>
int C<T>::func() const
{
return 3;
}
// Adding the following removes the warning <--------------------
// template<>
// int C<int>::func() const
// {
// return 4;
// }
私はこれがちょうどVS2010のバグであるかなり確信している:ここにREPROケースです。
"同等ですがもっと複雑なコードでは...簡単な例で警告を再現できません"。それから彼らはおそらく同等ではありません。 –
上記のコードでは、あなたがVS2010で話す警告は出ません。意味的に間違っていることは何もありませんが、デザインの選択は私にとって奇妙です。 – AJG85
私はまだその警告を再現する方法を理解しようとしています - 私は/ときに編集します。 – David