#include <iostream>
struct A { virtual void f() { std::cout << __PRETTY_FUNCTION__ << '\n'; } };
struct B : protected A { void f() override { std::cout << __PRETTY_FUNCTION__ << '\n'; } };
int main()
{
B b;
A* p = &b;
b.f();
p->f();
p->A::f();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEgeyB2aXJ0dWFsIHZvaWQgZigpIHsgc3RkOjpjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgJ1xuJzsgfSB9OwpzdHJ1Y3QgQiA6IHByb3RlY3RlZCBBIHsgdm9pZCBmKCkgb3ZlcnJpZGUgeyBzdGQ6OmNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAnXG4nOyB9IH07CgppbnQgbWFpbigpCnsKICAgIEIgYjsKICAgIEEqIHAgPSAmYjsKICAgIAogICAgYi5mKCk7CiAgICBwLT5mKCk7CiAgICBwLT5BOjpmKCk7Cn0=