#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; 
} 
