„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum kann Microsoft Visual C ++ keine zweiphasige Vorlage-Instanziierung korrekt implementieren?

Warum kann Microsoft Visual C ++ keine zweiphasige Vorlage-Instanziierung korrekt implementieren?

Gepostet am 2025-03-09
Durchsuche:510

Why Does Microsoft Visual C   Fail to Correctly Implement Two-Phase Template Instantiation?

Das Geheimnis von "kaputte" Two-Phase-Vorlage Instantiation in Microsoft visual c

Problemanweisung:

Benutzer werden häufig besorgt, dass Microsoft Visual c (msvc) kämpft mit korrekter Implementierung von zwei-Phase-Temperien. Welche spezifischen Aspekte des Mechanismus wirken nicht wie erwartet? Es entstehen jedoch Zweifel daran, ob diese Überprüfung überprüft, ob die in Vorlagen verwendeten Namen angemessen deklariert werden.

Erläuterung:

In der Tat ist MSVCs anfängliche Syntax -Scheck in den Geltungsbereich begrenzt. Es wird nicht nach dem Vorhandensein deklarierter Namen überprüft, was zu Kompilierungsproblemen führt, wenn Namen die richtigen Deklarationen fehlen.

Um dies zu veranschaulichen, betrachten Sie das folgende Beispiel: int foo (void*); Vorlage struct s { S () {int i = foo (0); } }; void foo (int); int main () { S s; }

Ein standardischer konformer Compiler würde den Foo (0) -Anruf während der ersten Phase auflösen und an foo (void*) binden. MSVC verschiebt diesen Prozess jedoch in die zweite Phase und bindet foo (0) zu foo (int) und führt zu einem Fehler. fälschlicherweise abhängige Ausdrücke wie Bar (t) im folgenden Code auf Deklarationen, die nur in der zweiten Phase sichtbar sind. struktur S {}; } Hohlraum (void *) {} template & lt; typename t & gt; void foo (t *t) { Bar (t); } void bar (n :: s *s) {} int main () { N :: s s; foo (& amp; s); }

In beiden Fällen verstößt das Verhalten von MSVC die angegebene Trennung zwischen der ersten und der zweiten Phasen der Vorlage -Instanziierung. Diese falsche Implementierung bleibt in Visual Studio 2015 bestehen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3