no override, 'class1::func1' has 'model1' calling convention whereas 'class2::func2' has 'model2' calling convention
The functions have different calling conventions.
Microsoft calling convention specifiers are used for disambiguation between overloaded functions.
The virtual mechanism will not be invoked for functions with differing calling conventions.
Example
struct X { virtual void __near func(); }; struct Y : X { void __far func(); // warning };