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