10

I have inherited a project making heavy use of template meta programming, and am now in the process of upgrading from Visual Studio 2010 to 2012. Some of the template-code no longer works in 2012. I have distilled a minimal example:

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

Gives this error message:

    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 ';'

Further down in MyClass, I can use T::Nested<i>, it is just the typedef that does not work.

This example compiles in 2010, but not in 2012. What is wrong with this code?

4

1 回答 1

12

Each VS version is more and more strict about requiring template and typename. You're missing a template, and VS2012 is right to complain.

于 2012-10-01T13:16:49.127 回答