私は、テンプレートのコードの一部は、もはや私は、最小限の例を蒸留している2012年に動作するテンプレートメタプログラミングの重い利用してプロジェクトを継承していない、と2012年にVisual Studioの2010からのアップグレードの過程で今の私している:なぜこのテンプレートコードはVS2010では動作しますが、VS2012では動作しませんか?
MyClass
でダウンさらに
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 ';'
、私はそれだけでは動作しませんtypedef
で、T::Nested<i>
を使用することができます。
template <typename T, int i>
class MyClass
{
private:
typedef typename T::Nested<i> Found;
};
は、このエラーメッセージを表示します。
この例は、2010年にコンパイルしますが、2012年には、このコードが間違っているではありませんか?
ない100%(したがってない答え)が、私はあなたが 'template'が欠落していると信じて:' typedefの型名T ::テンプレート入れ子の発見; 'または同様の何か。 –
Davidの情報に追加するだけで、常にVisual C++テンプレートコードをg ++に公開することをお勧めします。そして一般に、コードを少なくとも2つの異なるコンパイラでコンパイルするようにします。昔は本当に真面目だった人々がComeauを使っていましたが、もっと完全なC++ 11準拠に更新されたかどうかはわかりません。 –
+1最小限のテストケース。 – Puppy