This code does not compile due to ยง10.3 / 2, i.e. A virtual function A::fhas more than one final override in D.
#include <iostream>
class A { public: virtual void f(){ std::cout << "A::f" << '\n'; } };
class B : public virtual A { public: void f(){ std::cout << "B::f" << '\n'; } };
class C : public virtual A { public: void f(){ std::cout << "C::f" << '\n'; } };
class D : public B, public C { };
int main()
{
D d;
d.f();
}
But contrary to my expectations, this code compiles. Given that this sentence is contained in ยง10.3 / 2 For convenience we say that any virtual function overrides itself, it seems to me that we have the same problem here, that is, a virtual function A::fhas more than one finite override in D, that is, A::fand C::f. Actually the call d.f()is causing C::f. Why is this?
#include <iostream>
class A { public: virtual void f(){ std::cout << "A::f" << '\n'; } };
class B : public virtual A {};
class C : public virtual A { public: void f(){ std::cout << "C::f" << '\n'; } };
class D : public B, public C { };
int main()
{
D d;
d.f();
}
source
share