Vorlage Freundschaft Fehler Kompilation mit GCC, aber nicht mit Clang

8

Dieser Code wird mit clang 3.7.1 (ohne Diagnose) kompiliert, schlägt aber mit GCC 5.3.0 ( Live-Beispiel ):

%Vor%

Die Fehlermeldung von GCC lautet wie folgt:

  

main.cpp: 13: 16: Fehler: Spezialisierung von 'A' nach Instanziierung     Freund Struct A;

Welcher hat Recht und warum? Ist es ein Fehler von GCC / Clang?

    
Paolo M 07.04.2016, 08:15
quelle

3 Antworten

4

Scheint ein alter g ++ Bug zu sein ( Ссылка ).

Berichtet und nie korrigiert, wenn ich richtig verstehe,

    
max66 07.04.2016, 13:37
quelle
3

Ich denke, das ist der Fehler von gcc.

Eine Template-Friend-Class-Deklaration ist nur eine Deklaration, keine Definition. Die Deklaration der Klassenvorlage ist erlaubt, es sei denn, sie hat einen anderen Klassenschlüssel (siehe N4527 14.5.1.4).

Die Spezialisierung oder Instanziierung kann zweimal oder öfter erfolgen. Explizite Spezialisierung kann nur einmal vorkommen (N4527 14.7.3.6).

Dann ist die Diagnose von gcc seltsam, weil es keine explizite Spezialisierung gibt.

    
akakatak 07.04.2016 13:01
quelle
0

Wir haben einige Template-Namensauflösungsquoten:

%Vor%

Jetzt sind die Dinge klar:

%Vor%

bezieht sich auf:

%Vor%

was ist ... ja, teilweise Spezialisierung (wirklich schwierig).

Also GCC ist hier richtig.

Was Sie wirklich brauchen, ist:

%Vor%     
Konstantin Vladimirov 07.04.2016 14:08
quelle

Tags und Links