Алмаз смерти и оператор разрешения области (с ++)

У меня есть этот код (проблема с бриллиантом):

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

Я хочу позвонитьprint() вTop учебный класс.

Когда я пытаюсь скомпилировать его, я получаю сообщение об ошибке:'Top' is an ambiguous base of 'Bottom' на этой линии:b.Right::Top::print(); Почему это неоднозначно? Я явно указал, что я хочуTop отRight а не изLeft.

Я не хочу знать, КАК это сделать, да, это можно сделать с помощью ссылок, виртуального наследования и т. Д. Я просто хочу знать, почемуb.Right::Top::print(); неоднозначный.

Ответы на вопрос(2)

Ваш ответ на вопрос