コード:
template <class T>
void f(){
T::iterator a; // will work using Gcc if we add typename
//...
}
上記のコードは、MSVC++ を使用すると機能しますが、gcc を使用すると機能しません。MSVC++ は解析を遅らせるためです。
テンプレートの定義時にコンパイラが非依存の名前のルックアップのみを実行することはわかっています。T::iterator
明らかに T に依存しているため、テンプレートの定義時にルックアップが行われるのはなぜですか?