И у нас есть ошибка для следующей проблемы «страшного алмаза»:
struct A {virtual void Print() {}};
struct B: virtual public A {virtual void Print() {}};
struct C: virtual public A {virtual void Print() {}};
struct D: public B, public C {};
Компилятор не знает, какую версию выбрать, порядок определяется как неоднозначный. Почему бы просто не использовать «порядок разрешения по глубине слева направо», как определено в этом вопрос (с неубедительным ответом), а именно выбрать B над C?
Так почему эти разные подходы? Почему строгий порядок на 1, а не на 3? Разве не проще было оставить 1 неопределенным? Или 2 просто определяется как слева направо?
Это очень разные ситуации с различными компромиссами. В каждом случае вы должны рассмотреть
Ответы на эти вопросы очень разные в каждой ситуации, поэтому естественно, что выбор разный.
Других решений пока нет …