Erklärung hinter C ++ Quiz von Olve Maudal (Aliasvorlage)

8

Der folgende Code ist von Ссылка (# 6, Lösungspolymerisation auf Seite 34). Das Ziel war, die Ausgabe für die folgenden zu raten.

%Vor%

Die Antwort finden Sie auf Seite finden 34. Ich verstehe nicht, den zweiten Fall mit der Alias-Vorlage, warum die primäre Vorlage für% gewählt wird co_de% statt der voll spezialisiert.

Die richtige Antwort sollte „21“ sein, wie in der presentaton geschrieben. Mein MinGW (gcc 5.1) druckt "22" und Ссылка auch (die gcc 4.9.2 verwendet) druckt "22". Clang von einem Freund auf MacOS X druckt "21". Also ich denke, das ist ein Fehler in gcc.

Kann jemand mir erklären, warum „1“ für das X<Z> gedruckt wird und was Absatz aus dem Standard-gcc fehlgeschlagen könnte implementieren oder noch nicht umgesetzt?

    
bugybunny 14.05.2015, 16:52
quelle

1 Antwort

4

Ich denke es ist

  

14.5.7 Aliasvorlagen

     

1 Eine Template-Deklaration , in der die Deklaration eine Alias-Deklaration (Abschnitt 7) deklariert Der Bezeichner ist ein Alias ​​Template . Eine Aliasvorlage ist ein Name für eine Typenfamilie. Der Name der Aliasvorlage ist ein Vorlagenname .

Das oben genannte bedeutet, dass Y und Z verschiedene Schablonennamen s sind, also unterschiedliche Schablonen. Was Sie / den Compiler verwirren könnte ist, dass Y<T> und Z<T> immer einen identischen Typ ergeben.

Überlegen Sie:

%Vor%

Live-Beispiel

Das obige funktioniert für Clang, aber nicht für GCC.

EDIT: Wie von @ T.C. Es gibt eine aktive CWG-Ausgabe 1286 , die darauf hinweist, dass Clang was macht der Standard sagt derzeit, aber nicht was beabsichtigt war.

    
Daniel Frey 14.05.2015, 17:24
quelle

Tags und Links