Вызов метода C++ и неоднозначность разрешения области видимости типа

Надеюсь, заголовок действительно описывает то, что я хотел спросить...

Я написал фрагмент кода, который компилируется с помощью gcc и работает так, как я задумал. . Однако он не компилируется с помощью llvm, и код выполняется по-другому при компиляции с помощью icc!
Вот пример проблемы:

#include <iostream>

using std::cout; using std::endl;

class A {
public:
  virtual void foo() { cout << "A::foo()" << endl; }
};

class B : public A {
public:
  typedef A  base;
  virtual void foo() { cout << "B::foo()" << endl; }
};

int main() {
  typedef B  base;
  base* bp = new B();
  bp->base::foo(); 
}

вывод gcc: A::foo()
Вывод icc: B::foo()

Может ли кто-нибудь объяснить, что стандарт говорит об этом случае?

18
задан Kerrek SB 20 June 2012 в 08:40
поделиться