VS прав на C ++ 03.GCC прав на C ++ 0x.
Теперь GCC может иметь смысл разрешить это и в режиме C ++ 03 (есть много вещей, которые настоящие компиляторы не диагностируют в режиме C ++ 03, которые действительно действительны только в C ++ 0x), и для VS вполне может быть разумно отклонить его в режиме C ++ 03.
Больше не имеет значения, происходит ли использование typename QualifiedName
в шаблоне или нет, вC ++ 0x.То есть для C ++ 0x совершенно допустимо следующее:
#include<vector>
int main() {
typename std::vector<int> v;
}
В C ++ 03 typename
можно использовать только внутри шаблона.И явная специализация в вашем коде не шаблон.Нет template<typename T ...>
предложений (все параметры в вашем коде фиксированы).