我希望标题实际上描述了我想问的...
我写了一段代码,用 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()
有人能解释一下标准对这个案子有什么看法吗?