Как компилятор внутренне решает проблему алмаза в C++?

Мы знаем, что проблему алмаза можно решить с помощью виртуального наследования.

Например:

   class Animal // base class
   {
     int weight;
     public:
     int getWeight() { return weight;};
   };
   class Tiger : public Animal { /* ... */ }; 
   class Lion : public Animal { /* ... */ };
   class Liger : public Tiger, public Lion { /* ... */ }; 
   int main()
   {
     Liger lg ;
     /*COMPILE ERROR, the code below will not get past
     any C++ compiler */
     int weight = lg.getWeight();
   }

При компиляции данного кода мы получим ошибку неоднозначности. Теперь мой вопрос в том, как компилятор внутренне обнаруживает эту проблему неоднозначности (проблема алмаза).

11
задан zpasternack 12 September 2011 в 06:18
поделиться