タイトルが私が聞きたかったことを実際に表していることを願っています...
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()
誰かがこのケースについて標準が何を言っているのか説明できますか?