Почему этот код шаблона работает в VS2010, но не в VS2012?

Я унаследовал проект, сильно использующий мета-программирование шаблонов, и теперь я сейчас обновляюсь с Visual Studio 2010 до 2012 года. Некоторые из шаблонов уже не работают в 2012 году. Я отстранил минимальный пример:

template <typename T, int i>
class MyClass
{
private:
    typedef typename T::Nested<i> Found;
};

Дает следующее сообщение об ошибке:

    source.cpp(5): error C2059: syntax error : '<'
    source.cpp(6) : see reference to class template instantiation 'MyClass<T,i>' being compiled
    source.cpp(5): error C2238: unexpected token(s) preceding ';'

Далее в MyClass, я могу использовать T::Nested<i>, это не работает typedef.

Этот пример компилируется в 2010 году, но не в 2012 году. Что не так с этим кодом?

Ответ 1

Каждая версия VS все более и более строго требует использования template и typename. Вам не хватает template, и VS2012 прав, чтобы жаловаться.