The C++11 FDIS it says
If a virtual function is marked with the virt-specifier override and does not override a member function of a base class, the program is ill-formed. [ Example:
struct B { virtual void f(int); }; struct D : B { void f(long) override; // error: wrong signature overriding B::f void f(int) override; // OK };
What if B::f
would not have been marked virtual? Is the program ill-formed, then? Or is override
then to be ignored`. I can not find any handling of this case in the std text.
Update 1/2 (merged) I forwarded a request to the C++ Editors to look into things. Thanks Johannes to pointing that out to me.
- "void f(long) override" does not override a function, esp. no virtual one,
- therefore it is not virtual
- therefore the text "If a virtual function is marked with..." does not apply
- therefore the example does not match the text.
But by realizing this I found, that the intention of the "override" contextual keyword can not be met: if a typo in the function name or the wrong argument type does make the function itself non-virtual, then the standard's text never applies -- and "override" is rendered useless.
The best possible solution may be
- putting "virtual" in front of the example's functions