Diamante de la muerte y operador de resolución de alcance (c ++)

Tengo este código (problema del diamante):

#include <iostream>
using namespace std;

struct Top
{
    void print() { cout << "Top::print()" << endl; }
};

struct Right : Top 
{
    void print() { cout << "Right::print()" << endl; }
};

struct Left : Top 
{
    void print() { cout << "Left::print()" << endl; }
};

struct Bottom: Right, Left{};

int main()
{
    Bottom b;
    b.Right::Top::print();
}

quiero llamarprint() enTop clase.

Cuando intento compilarlo me sale un error:'Top' is an ambiguous base of 'Bottom' en esta linea:b.Right::Top::print(); ¿Por qué es ambiguo? Especifiqué explícitamente que quieroTop deRight y no deLeft.

No quiero saber CÓMO hacerlo, sí, se puede hacer con referencias, herencia virtual, etc. Solo quiero saber por québ.Right::Top::print(); ambiguo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta