Скажите, у меня есть три класса:
class X{};
class Y{};
class Both : public X, public Y {};
Я хочу сказать, что у меня есть два класса, а затем третий класс, который расширяет оба (множественное наследование).
Теперь скажите, что у меня есть функция, определенная в другом классе:
void doIt(X *arg) { }
void doIt(Y *arg) { }
и я вызываю эту функцию с экземпляром обоих:
doIt(new Both());
Это вызывает ошибку во время компиляции, утверждая, что вызов функции неоднозначен.
В каких случаях, кроме этого, компилятор C ++ решает, что вызов неоднозначен, и выдает ошибку, если таковая имеется? Как компилятор определяет, что это за случаи?