Compiler Warning (level 4) C4373

'function': virtual function overrides 'base_function', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers

Remarks

Your application contains a method in a derived class that overrides a virtual method in a base class. The parameters in the overriding method differ by a const or volatile qualifier from the parameters of the virtual method.

Before Visual Studio 2008, the compiler would bind the function to the method in the base class. Later versions of the compiler ignore the const or volatile qualifier, bind the function to the method in the derived class, then issue warning C4373. The latter behavior conforms to the C++ standard.

Example

The following code example generates warning C4373. To resolve this issue, make the override use the same CV-qualifiers as the base member function. If you didn't intend to create an override, rename the function in the derived class.

// c4373.cpp
// compile with: /c /W3
#include <stdio.h>
struct Base
{
    virtual void f(int i) {
        printf("base\n");
    }
};

struct Derived : Base
{
    void f(const int i) {  // C4373
        printf("derived\n");
    }
};

int main()
{
    Derived d;
    Base* p = &d;
    p->f(1);
}
derived