Verwenden von Standardvorlagenparametern in Parametern für variable Vorlagenvorlagen

9

Ich habe festgestellt, dass das folgende Minimalbeispiel auf gcc und clang und sogar Visual Studio funktioniert, aber es kompiliert nicht mit icc. Ich versuche zu bestimmen, ob das C ++ gültig ist oder nicht, aber ich bin nicht in der Lage, die relevanten Teile des Standards zu finden, die meine Frage beantworten, da dies mehrere verschiedene Konzepte kombiniert.

%Vor%

Mit icc (16.0.3) gibt die Kompilierung den folgenden Fehler:

%Vor%

Ist das C ++ gültig?

Mir scheint es so zu sein, weil C einen Standardwert für seinen zweiten Template-Parameter hat, was bedeutet, dass F<D> mit F = C eine gültige Konstruktion sein sollte.

    
ryan 06.06.2016, 14:03
quelle

1 Antwort

4

Ich glaube, das ist ein GCC / Clang Bug. Dies hängt mit der [noch offenen] CWG-Ausgabe 150 zusammen. Die Begründung beinhaltet:

  

Für die Parameter eines Vorlagenparameters sind Standardargumente zulässig. Diese Standardargumente werden in einer Spezialisierung des Vorlagenparameters innerhalb einer Vorlagendefinition berücksichtigt. Alle Standardargumente für die Parameter eines Vorlagenschablonenarguments werden ignoriert .

Der Template-Vorlagenparameter F hat keine Standardargumente - und die Standardargumente für C werden ignoriert. Wir sollten also mit einer schlecht formierten Spezialisierung enden, wie ICC es vorschlägt.

In den im Problem enthaltenen Beispielen scheint sowohl gcc als auch clang die Regel zu implementieren (weder erlaubt der Aufruf von f() noch beide den Pfad operator float() im Beispiel von Mark Mitchell.

    
Barry 06.06.2016 14:41
quelle