Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-42812

Remove superfluous `virtual` keywords from known `overload` appropriate situations.

    • Type: Icon: Improvement Improvement
    • Resolution: Unresolved
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • Labels:
      None
    • Service Arch

      Each of the forms of:

      virtual void f() override final;
      virtual void f() override;
      virtual void f() final;
      virtual void f();
      
      void f() override final;
      void f() override;
      void f() final;
      void f();
      

      means something subtly and slightly different.

      Each means:

      virtual void f() override final;  // is virtual, must override, cannot be overriden
      virtual void f() override; // is virtual, must override, may be overriden
      virtual void f() final; // is virtual, may be overriden
      virtual void f(); // is virtual
      
      void f() override final; // require virtual, must override, cannot be overriden
      void f() override; // require virtual, must override
      void f() final; // require virtual, cannot be overriden
      void f(); // may or may not be virtual.
      

      Some things to note:

      • The `virtual override final` form is the same as the `override final` form which is the same as the `final` form.
      • The `virtual override` form is the same as the `override` form.
      • The `virtual final` form may be a 1st generation function!
      • The `virtual` form may ALSO be a 1st generation function!

      Looking at all of the forms again:

      virtual void f() override final;  // Superfluous syntax for `void f() final;`
      virtual void f() override; // Superfluous syntax for `void f() override;`
      virtual void f() final; // Dangerous form – may not be overriding
      virtual void f(); // Not necessarily the 1st generation function, uncertain.
      
      void f() override final; // Superfluous syntax for `void f() final;`
      void f() override; // Tersest syntax for this form.
      void f() final; // Tersest syntax for this form.
      void f(); // Uncertain form.
      

      This means that no more than 1 of the keywords `virtual`, `override`, or `final` should be used on a function declaration. 

            Assignee:
            backlog-server-servicearch [DO NOT USE] Backlog - Service Architecture
            Reporter:
            adam.martin@mongodb.com ADAM Martin (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: