| .. index:: Add-Override Transform |
| |
| ====================== |
| Add-Override Transform |
| ====================== |
| |
| The Add-Override Transform adds the ``override`` specifier to member |
| functions that override a virtual function in a base class and that |
| don't already have the specifier. The transform is enabled with the |
| :option:`-add-override` option of :program:`clang-modernize`. |
| For example: |
| |
| .. code-block:: c++ |
| |
| class A { |
| public: |
| virtual void h() const; |
| }; |
| |
| class B : public A { |
| public: |
| void h() const; |
| |
| // The declaration of h is transformed to |
| void h() const override; |
| }; |
| |
| Using Expands-to-Override Macros |
| ================================ |
| |
| Like LLVM's ``LLVM_OVERRIDE``, several projects have macros that conditionally |
| expand to the ``override`` keyword when compiling with C++11 features enabled. |
| To maintain compatibility with non-C++11 builds, the Add-Override Transform |
| supports detection and use of these macros instead of using the ``override`` |
| keyword directly. Specify ``-override-macros`` on the command line to the |
| Modernizer to enable this behavior. |
| |
| |
| Known Limitations |
| ================= |
| * This transform will not insert the override keyword if a method is |
| pure. At the moment it's not possible to track down the pure |
| specifier location. |
| |
| .. code-block:: c++ |
| |
| class B : public A { |
| public: |
| virtual void h() const = 0; |
| |
| // The declaration of h is NOT transformed to |
| virtual void h() const override = 0; |
| }; |
| |