c ++ (g ++ - 4.x) Problem mit Vorlagen

8

Ich habe diesen einfachen Code:

%Vor%

Es funktioniert auf den letzten g ++ - Versionen, aber in 4.4 oder 4.5 bekomme ich diesen Fehler:

%Vor%

Was mache ich falsch?

    
Hugo 29.05.2011, 22:37
quelle

2 Antworten

12

Das liegt daran, dass innerhalb des Körpers der Klasse Test<Writer> die Benennung von Test ohne Angabe der Vorlagenargumente automatisch die gleichen Argumente annimmt (z. B. Writer ).

Beispielsweise können Sie den Kopierkonstruktor wie folgt schreiben:

%Vor%

statt

%Vor%

Sie können dies umgehen, indem Sie Test mit seinem Namespace, z. B.

, qualifizieren %Vor%

HINWEIS: Wie Tomalek vorschlägt, ist die ursprüngliche Verwendung in C ++ 0x gültig. Hier ist der relevante Absatz des Standards (Hervorhebung von mir), aus Abschnitt 14.6.1 ( [temp.local] ):

  

Wie normale (Nicht-Template-) Klassen haben Klassenvorlagen einen injected-class-name (Klausel 9). Der eingegebene Klassenname kann als Vorlagenname oder Typname verwendet werden. Bei Verwendung mit einer -Template-Argumentliste , als -Template-Argument für einen Template Template-Parameter oder als endgültiger Bezeichner im elaborated-type-specifier einer Friend-Class-Template-Deklaration, bezieht sich auf die Klassenvorlage selbst . Ansonsten entspricht dies dem Schablonennamen , gefolgt von den Schablonen-Parametern der Klassenschablone, die in & lt; & gt;.

eingeschlossen ist
    
Ben Voigt 29.05.2011, 22:41
quelle
1

@Ben ist wahrscheinlich richtig, aber hier ist ein völlig anderer Weg, um es zu kompilieren, das keine Vorlagen als Argumente für Vorlagen verwendet.

%Vor%

Ich habe zwei Änderungen vorgenommen. @Hugo, vielleicht ist das was du wolltest, und vielleicht haben ältere Versionen von g ++ das?

Es ist einfach, Code zum Kompilieren zu bekommen, aber das bedeutet nicht, dass er das tut, was er zu tun glaubt!

    
Aaron McDaid 30.05.2011 00:20
quelle

Tags und Links