C++ method call and type scope resolution ambiguity
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:

    
    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; }
    };

    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?  
C++ method call and type scope resolution ambiguity
===

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:

    
    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; }
    };

    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?  