#include <iostream>
using namespace std;
struct A
{
char const * value( ) const
{
return valueImpl( ) ;
}
protected :
virtual char const * valueImpl( )
{ return "A" ; }
} ;
struct B
{
char const * value( ) const
{
return valueImpl( ) ;
}
protected :
virtual char const * valueImpl( ) const
{ return "B" ; }
} ;
class C : public A, public B
{
public :
using B:: value ;
} ;
int main( )
{
C obj;
cout << obj.value ( ) << endl;
A * ptr = & obj;
cout << ptr- > value( ) << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAKIAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKIApzdHJ1Y3QgQSAKeyAKICAgIGNoYXIgY29uc3QqIHZhbHVlKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gdmFsdWVJbXBsKCk7CiAgICB9CnByb3RlY3RlZDoKICAgIHZpcnR1YWwgY2hhciBjb25zdCAqIHZhbHVlSW1wbCgpIAogICB7IHJldHVybiAiQSI7IH0gCn07IAogCnN0cnVjdCBCIAp7IAogICAgY2hhciBjb25zdCogdmFsdWUoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiB2YWx1ZUltcGwoKTsKICAgIH0KcHJvdGVjdGVkOgogICAgdmlydHVhbCBjaGFyIGNvbnN0ICogdmFsdWVJbXBsKCkgY29uc3QgCiAgICB7IHJldHVybiAiQiI7IH0gCn07IAogCmNsYXNzIEMgOiBwdWJsaWMgQSwgcHVibGljIEIgCnsgCnB1YmxpYzoKICAgdXNpbmcgQjo6dmFsdWU7CiAgICAKfTsgCiAKaW50IG1haW4oKSAKeyAKICAgIEMgb2JqOyAKICAgIGNvdXQgPDwgb2JqLnZhbHVlKCkgPDwgZW5kbDsgCiAKICAgIEEgKiBwdHIgPSAmb2JqOyAKICAgIGNvdXQgPDwgcHRyLT52YWx1ZSgpIDw8IGVuZGw7IAp9IAo=