Verwenden Sie std :: initializer_list in Visual C ++ - Compiler November 2012 CTP

7

Ich möchte std::initializer_list s in Visual Studio 2012 wie ein Typ in dieses Beispiel . Mein Betriebssystem ist Windows 8 x64.

Deshalb habe ich vor kurzem den Visual C ++ Compiler November 2012 CTP und so installiert Von Microsoft erwähnt, änderte ich das Plattform-Toolset meines Projekts, um diesen neuen aktualisierten Compiler zu verwenden.

Aber auch danach steht weder ein std::initializer_list noch ein <initializer_list> Header zur Verfügung. Aber die verlinkte Website von Microsoft sagt mir (unter der Überschrift "Überblick"), dass Initialisierungslisten mit diesem Update verfügbar wären. Ich habe sowohl die IDE als auch meinen PC neu gestartet. Ich bin nicht sicher, ob es durch die Tatsache verursacht werden könnte, dass ich (leider) die deutsche Ausgabe von Visual Studio verwende und das Compiler-Update auf Englisch ist. Was mache ich falsch?

Update: Wenn versucht wird, die von IntelliSense kritisierte Zeile auto a = { 0 }; zu kompilieren, zeigt die Compiler-Ausgabe 'Microsoft Visual C++ Compiler Nov 2012 CTP' is for testing purposes only. an und der Compiler stürzt ab und ein Fehlerfenster erscheint, das Microsoft (R) C/C++ Compiler Driver has stopped working lautet. Ohne eine neue Syntax kompiliert und funktioniert alles mit dem neuen ausgewählten Compiler.

    
danijar 28.01.2013, 10:14
quelle

2 Antworten

24

(Ich arbeite für Microsoft und mit Dinkumware, um die Standardbibliothek von VC zu implementieren.)

[danijar]

  

Ich bin nicht sicher, ob es durch die Tatsache verursacht werden könnte, dass ich (leider) die deutsche Version von Visual Studio verwende und das Compiler-Update auf Englisch ist.

Leider unterstützt das englischsprachige CTP den deutschen VS nicht.

Der "Compiler-Treiber" cl.exe ruft das Compiler-Frontend c1xx.dll, das Compiler-Backend c2.dll und den Linker link.exe auf. Es ist sehr ungewöhnlich, dass der Compiler-Treiber abstürzt. Ich spekuliere, dass es versucht, eine der Fehlermeldungen anzuzeigen, die vom CTP hinzugefügt wurden, aber da das CTP die deutschen Ressourcen nicht aktualisiert hat, kann der Compilertreiber die Fehlermeldung nicht laden und fährt mit dem Absturz fort.

Beachten Sie, dass sich dies von einem internen Compiler-Fehler im Front-End oder Back-End oder einem normalen Compilerfehler unterscheidet, der falsch ausgegeben wird. (Viele ICEs und gefälschte Fehler wurden behoben, nachdem das CTP veröffentlicht wurde.)

  

Aber selbst nachdem dies geschieht, gibt es weder eine std :: initializer_list noch eine & lt; initializer_list & gt; Header verfügbar.

Die CTP installiert & lt; initializer_list & gt; an einem besonderen Ort. (Es wurde tatsächlich vom Compiler-Team geschrieben.)

In der Befehlszeile die Beschwörungsformeln für die Verwendung des CTP und put & lt; initializer_list & gt; auf dem Include-Pfad sind (unter Annahme von Standard-Speicherorten):

%Vor%
  

Der Versuch, die Zeile automatisch zu kompilieren a = {0}; was von IntelliSense kritisiert wird

Dies wurde dokumentiert - Intellisense wurde vom CTP nicht aktualisiert, daher erkennt es keine der neuen Funktionen.

[rubenvb]

  

Die C ++ - Standardbibliothek wurde nicht mit dem Compiler aktualisiert, so dass Sie ohne anständiges & lt; tuple & gt; und & lt; intialiser_list & gt; (Dies beinhaltet das Weglassen der stained init list-Konstruktoren für alle Standardcontainer)

Möglicherweise möchten Sie erfahren, dass wir die Standardbibliothek aktualisiert haben, um bereichsspezifische Enums und Initialisierungslisten vollständig zu unterstützen. Dies beinhaltet alle vom aktuellen Arbeitspapier (N3485) vorgeschriebenen initializer_list-Überlastungen sowie die Installation von & lt; initializer_list & gt; an der üblichen Stelle zusammen mit allen anderen Standard-Headern. (Es ist auch die offizielle Kopie von Dinkumware, obwohl die Unterschiede zwischen der "gefälschten" Version des Compilerteams und der Compiler-Version meistens kosmetischer Natur waren.) Dieses Zeug wird in der nächsten öffentlichen Version verfügbar sein, wann immer und was auch immer das ist. Unsere nächste Aufgabe besteht darin, die Standardbibliothek mit expliziten Konvertierungsoperatoren und variadischen Vorlagen zu aktualisieren, um unsere spröden Simulationen zu ersetzen.

    
Stephan T. Lavavej 28.01.2013, 22:01
quelle
3

Wie Sie bemerkt haben, ist die CTP im November aus mindestens zwei Gründen sehr eingeschränkt:

  1. Der Compiler verfügt über zahlreiche crash-verursachende Fehler, wie den, den Sie entdeckt haben.

  2. Die C ++ - Standardbibliothek wurde nicht mit dem Compiler aktualisiert, so dass Sie keine anständige <tuple> und <intializer_list> haben (dies beinhaltet das Auslassen der gestützten Init-Listenkonstruktoren für alle Standardcontainer) )

Auch: das verlinkte Beispiel ist sehr hässlicher Code. Wenn Sie diese Funktion verwenden möchten, verwenden Sie einen Compiler wie GCC oder Clang, der diese Syntax unterstützt. Sie sind beide für Windows verfügbar. Das Hacken einer halb-implementierten Sprachfunktion durch das Schreiben von extra Code ist einfach dumm.

    
rubenvb 28.01.2013 18:21
quelle