Şablon meta programlamadan yoğun bir şekilde yararlanan bir projeyi miras aldım ve şu anda Visual Studio 2010'dan 2012'ye yükseltme işlemindeyim. Şablon kodunun bir kısmı artık 2012'de çalışmamaktadır. En az bir örneği distile ettim:Bu şablon kodu neden VS2010'da çalışıyor, ancak VS2012'de çalışmıyor?
MyClass
aşağı Dahası
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 ';'
, ben sadece çalışmıyor typedef
olduğunu T::Nested<i>
kullanabilirsiniz:
template <typename T, int i>
class MyClass
{
private:
typedef typename T::Nested<i> Found;
};
bu hata mesajını verir.
Bu örnek, 2010'da derlenmiştir, ancak 2012'de değil. Bu kodun nesi yanlış?
% 100 değil (bu yüzden bir yanıt değil) ama bir "şablon" un eksik olduğuna inanıyorum: "typedef typename T :: template Nested Bulundu" veya benzer bir şey. –
Sadece David'in bilgisine ekleyerek, Visual C++ şablon kodunu g ++ 'ye çıkarmak her zaman iyi bir fikirdir. Ve genel olarak, kodu en az iki farklı derleyiciyle derlemek. Eskiden bu günlerde gerçekten çok ciddi olan insanlar Comeau'yu kullandılar, fakat daha fazla C++ 11 uyumluluğuna güncellendiğinden emin değilim. Minimum test durumu için –
+1. Kısa ve özlü – Puppy