Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top