Я унаследовал проект, сильно использующий мета-программирование шаблонов, и теперь я сейчас обновляюсь с 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 году. Что не так с этим кодом?