10

テンプレート メタ プログラミングを多用するプロジェクトを継承し、現在 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 年にはコンパイルされません。このコードの何が問題なのですか?

4

1 に答える 1

12

templateVS の各バージョンでは、との要求がますます厳しくなっていtypenameます。がありませんtemplate.VS2012は文句を言うのが正しいです。

于 2012-10-01T13:16:49.127 に答える