Я надеюсь, что название фактически описывает то, что я хотел спросить...
Я написал фрагмент кода, который компилируется с помощью 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 output: B:: foo()
Может кто-нибудь объяснить, что говорит стандарт об этом случае?