Почему этот код шаблона работает в VS2010, но не в VS2012?
-
12-12-2019 - |
Вопрос
Я унаследовал проект, в котором активно используется шаблонное метапрограммирование, и сейчас нахожусь в процессе обновления с 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 году.Что не так с этим кодом?
Решение
Каждая версия VS все более и более строго требует template
и typename
.Ты упускаешь template
, и VS2012 имеет право жаловаться.
Не связан с StackOverflow