I have 3 interface (pure virtual) classes like this
class A {
    virtual void M1() = 0;
    virtual void M2() = 0;
};
class B : public A {
    virtual void M3() = 0;
};
class C : public A {
    virtual void M4() = 0;
};
I have the implementers like this
class Aimpl : A {
    void M1 () override {};
    void M2 () override {};
}
class Bimpl: public Aimpl, public B{
     void M3() override {};
}
class Cimpl: public Aimpl, public C{
     void M4() override {};
}
and
Bimpl b = Bimpl();
b.M2() // Error. M2 is ambigous. Can be from Aimpl or A
what's a simple way to fix this? I want to be able to pass around B or C in functions rather than Bimpl
 
     
    