У меня есть этот код (проблема с алмазами):
#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(); неоднозначно.