https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78010
--- Comment #4 from ol.rakhimov at gmail dot com --- (In reply to Arnaud Desitter from comment #3) > Interesting reference. Note that "virtual + final" can be useful even if the > core guidelines discourage its use. > > struct A { > virtual void f() final; > }; > struct B : A { > // "void f()" cannot be defined > }; I've seen this in Bjarne's C++11 FAQ/INFO pages, but why would you do that? It's weird and uncommon. Virtual implies functionality to be overridden. If no override is permitted, just use good-old plain member function. struct A { void f(); }; struct B : A { void f(); // Comiler may warn about the hiding of A::f };