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
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…