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