Devirtualizing a non-final method
问题 Suppose I have a class setup like the following: class A { public: virtual void foo() { printf("default implementation\n"); } }; class B : public A { public: void foo() override { printf("B implementation\n"); } }; class C : public B { public: inline void foo() final { A::foo(); } }; int main(int argc, char **argv) { auto c = new C(); c->foo(); } In general, can the call to c->foo() be devirtualized and inlined down to the printf("default implementation") call? Is this guaranteed, for example