Vorlage Argument Name Kollision mit Methode in MSVC C ++

8

Das folgende Snippet kompiliert nicht in MSVC C ++ (2015, 2017):

%Vor%

Der Compiler ist verwirrt und interpretiert den Aufruf des Type -Konstruktors mit einem Aufruf von Type() Methode der Klasse, von der ich versuche, abzuleiten. GNU C ++ Compiler hat kein Problem mit dem Code.

Umbenennen des Vorlagenarguments Geben Sie die Basisklassen-Deklaration in eine andere Form ein (nicht in Konflikt mit einer Methode der Basisklasse), um das Problem zu lösen. Hinzufügen von etwas wie : (typename Type)(type) hilft nicht.

Ist das ein Fehler des MSVC C ++ - Compilers? Irgendwelche Tipps zur Lösung dieser Art von Problemen?

    
Freemanix 10.10.2017, 08:48
quelle

1 Antwort

9

Dies ist ein Fehler in MSVC ++. Bei der Zweiphasen-Suche muss Type als Name des Vorlagenparameters und als Basis während der Vorlage definition aufgelöst werden!

Die Tatsache, dass ein solches Mitglied an der Stelle der Instanziierung ist, sollte nicht stören. Wenn Vorlagen korrekt implementiert werden, geschieht dies nicht, wie Sie bei GCC festgestellt haben.

Aber Microsoft hat es nicht korrekt implementiert bis vor kurzem . In ihrer Implementierung verhält sich eine Vorlage eher wie ein Makro, was die Ursache für einen Fehler ist.

    
StoryTeller 10.10.2017 09:00
quelle

Tags und Links