title: override on non-virtual functions
body: <p>The C++11 FDIS it says</p>
  
  <blockquote>
    <p>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:</p>
  
  <pre><code>struct B {
      virtual void f(int);
  };
  struct D : B {
      void f(long) override; // error: wrong signature overriding B::f
      void f(int) override; // OK
  };
  </code></pre>
  </blockquote>
  
  <p><strong>What if <code>B::f</code> would not have been marked virtual?</strong> Is the program ill-formed, then? Or is <code>override</code> then to be ignored`. I can not find any handling of this case in the std text.</p>
  
  <p><strong>Update 1/2</strong> (merged) I forwarded a request to the C++ Editors to look into things. Thanks <em>Johannes</em> to pointing that out to me.</p>
  
  <ul>
  <li>"void f(long) override" does not override a function, esp. no virtual one,</li>
  <li>therefore it is not virtual</li>
  <li>therefore the text "If a virtual function is marked with..." does not apply</li>
  <li>therefore the example does not match the text.</li>
  </ul>
  
  <p>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.</p>
  
  <p>The best possible solution may be</p>
  
  <ul>
  <li>putting "virtual" in front of the example's functions</li>
  </ul>