Der folgende Code deklariert eine Vorlage, deklariert eine explizite Instanziierungsdefinition und deklariert dann eine explizite Instanziierungsdeklaration:
%Vor%gibt einen Fehler:
%Vor%in Visual Studio 2012.
Ich bin unter dem Eindruck von Ссылка Dies sollte gültig sein, da die Definition der Deklaration folgt.
Vermisse ich etwas?
Ihr Programm ist wohlgeformt. Paragraph 14.7.2 / 11 des C ++ 11 Standards spezifiziert:
Wenn eine Entität Gegenstand einer expliziten Instantiierungsdeklaration und einer expliziten Instanziierungsdefinition ist In derselben Übersetzungseinheit muss die Definition der Erklärung folgen. [...]
Ihr Programm respektiert diese Einschränkung und bricht keine andere Regel. Daher ist dies ein Fehler in VC11.
Dieses Problem wurde anscheinend an Microsoft Connect 620017 gemeldet >:
Gepostet von Microsoft am 03.12.2010 um 13:52 Uhr
Hallo,
Wie Sie bereits bemerkt haben, ist unsere Implementierung von externen Vorlagen nicht möglich entsprechen dem C ++ - 0x-Standard. Wir haben immer noch unsere alte Erweiterung Implementierung. Obwohl wir nicht über die Ressourcen verfügen, um die C ++ - 0x Version dieser Funktion für die nächste Version von Visual Studio, Konformitätsprobleme haben für uns Priorität; Wir beabsichtigen dies derzeit Implementieren Sie dieses Feature in einer zukünftigen Version von Visual Studio.
Danke, dass Sie sich die Zeit genommen haben, dieses Problem zu melden. Wir schätzen es.
Jamie Eckman visuelles C ++ Team
Das war von 2010, also meinte er bei "next release" VS2012.
Dieser Visual C ++ - Konformitätsfehler wird in Visual Studio 2013 behoben, das hier verfügbar ist. Mit diesem Fix können extern template
-Deklarationen in Header-Dateien platziert werden, um die Template-Instanziierung zu unterdrücken und dennoch eine explizite Instanziierung in einem Modul zu deklarieren, wodurch die Kompilierungszeit und der Code-Bloat reduziert werden können. Das Umkehren der Anweisungen (dh eine explizite Instanziierungsanforderung, gefolgt von einer extern template
-Deklaration mit denselben Vorlagenargumenten) verursacht weiterhin den Fehler C2929, da es so aussieht, als ob Sie jetzt versuchen, etwas zu unterdrücken, das Sie bereits explizit instanziiert haben.
Tags und Links c++ c++11 visual-studio-2012 templates