https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120831

            Bug ID: 120831
           Summary: Raise a diagnostic when a class/struct that is marked
                    as final introduces a virtual method
           Product: gcc
           Version: 15.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: arash at partow dot net
  Target Milestone: ---

In clang++ v21, the following code correctly raises the diagnostic below:

  struct base
  {
      virtual ~base() = default;
      virtual void foo() {}
  };

  struct derived final : public base
  {
      void foo() override {}

      virtual void bar() {} // raise error due to this.
  };




Diagnostic

  <source>:11:18: error: virtual method 'bar' is inside a 'final' class and can
never be overridden [-Werror,-Wunnecessary-virtual-specifier]
     11 |     virtual void bar() {}


Where the arguments are:

-pedantic-errors -Wall -Wextra -Werror  -Wcast-align -Wcast-qual
-Wctor-dtor-privacy -Wint-in-bool-context -Wmissing-declarations
-Wredundant-decls -Wundef -Wunused-function -Wnon-virtual-dtor
-Woverloaded-virtual -Wno-missing-template-arg-list-after-template-kw


However afaict, G++ does not provide such a diagnostic - unless I'm possibly
missing the appropriate option.

It should be noted that the -Wunnecessary-virtual-specifier seems to, for now,
be clang++ specific.


https://godbolt.org/z/rPG6r8EPa

Reply via email to