clases base abstractas, herencia múltiple y métodos virtuales puros comunes

El siguiente código de prueba parece indicar que si una clase tiene dos clases base abstractas con métodos virtuales puros comunes, estos métodos se "comparten" en la clase derivada.

#include <iostream>
#include <string>

using namespace std;

struct A
{
    virtual string do_a() const = 0;
    virtual void set_foo(int x) = 0;
    virtual int get_foo() const = 0;
    virtual ~A() {}
};

struct B
{
    virtual string do_b() const = 0;
    virtual void set_foo(int x) = 0;
    virtual int get_foo() const = 0;
    virtual ~B() {}
};

struct C : public A, public B
{
    C() : foo(0) {}
    string do_a() const { return "A"; }
    string do_b() const { return "B"; }
    void set_foo(int x) { foo = x; }
    int get_foo() const { return foo; }
    int foo;
};

int main()
{
    C c;
    A& a = c;
    B& b = c;
    c.set_foo(1);
    cout << a.do_a() << a.get_foo() << endl;
    cout << b.do_b() << b.get_foo() << endl;
    cout << c.do_a() << c.do_b() << c.get_foo() << endl;
    a.set_foo(2);
    cout << a.do_a() << a.get_foo() << endl;
    cout << b.do_b() << b.get_foo() << endl;
    cout << c.do_a() << c.do_b() << c.get_foo() << endl;
    b.set_foo(3);
    cout << a.do_a() << a.get_foo() << endl;
    cout << b.do_b() << b.get_foo() << endl;
    cout << c.do_a() << c.do_b() << c.get_foo() << endl;
}

Este código se compila limpiamente en g ++ 4.1.2 (es cierto que es antiguo), usando -std = c ++ 98 -pedantic -Wall -Wextra -Werror. La salida es:

A1
B1
AB1
A2
B2
AB2
A3
B3
AB3

Esto es lo que deseo, pero cuestiono si esto funciona en general, o solo "por accidente". Fundamentalmente, esta es mi pregunta: ¿puedo depender de este comportamiento o siempre debería heredar de una clase base virtual para este tipo de escenario?

Respuestas a la pregunta(1)

Su respuesta a la pregunta