Ich habe ein Projekt macht intensiven Gebrauch von Vorlage Meta-Programmierung und bin nun in dem Prozess der Aktualisierung von Visual Studio 2010 bis 2012. Einige des Template-Code geerbt funktioniert nicht mehr im Jahr 2012. I ein minimales Beispiel destilliert habe:Warum funktioniert dieser Vorlagencode in VS2010, aber nicht in VS2012?
template <typename T, int i>
class MyClass
{
private:
typedef typename T::Nested<i> Found;
};
gibt diese Fehlermeldung:
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 ';'
Weiter unten in MyClass
, ich T::Nested<i>
verwenden können, ist es nur die typedef
, das nicht funktioniert.
Dieses Beispiel stellt im Jahr 2010, aber nicht im Jahr 2012. Was ist mit diesem Code falsch?
Nicht 100% (also keine Antwort), aber ich glaube, dass Sie eine 'template' fehlen:' typedef typename T :: template Verschachtelte gefunden; 'oder gleich etwas. –
Hinzufügen Nur um Davids Info, es ist immer eine gute Idee, Visual C++ Template-Code zu g ++ zu belichten. Und im Allgemeinen, um den Code mit mindestens zwei verschiedenen Compilern kompilieren zu lassen. In den alten Tagen haben Leute, die es wirklich ernst meinten, Comeau benutzt, aber ich bin mir nicht sicher, ob es auf eine vollständigere C++ 11-Konformität aktualisiert wurde. –
+1 für minimalen Testfall. – Puppy