I hope the title actually describes what I wanted to ask...
I wrote a piece of code that compiles with gcc and works as I intended.  However, it does not compile with llvm and the code executes differently when compiled with icc!
Here is an example of the problem:
#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 output:  A::foo()
icc output:  B::foo()
Could somebody explain what does the standard say about this case?
 
     
     
     
    