Nicht letzte Standardschablonenargumente für Funktionsschablonen

8

C ++ 11 führte Standardvorlagenargumente für Funktionsvorlagen ein . Siehe auch Standardvorlagenargumente für Funktionsvorlagen .

Aber beim Lesen des C ++ - Standards konnte ich nicht feststellen, dass es legal ist, eine Funktionsschablone zu definieren, die Standardschablonenargumente für das erste Schablonenargument verwendet, aber nicht die anderen Schablonenargumente.

Dies wäre das Gegenteil davon, wie Standardargumente gehandhabt werden, wobei alle nachfolgenden Parameter einen Standardwert haben müssen Argument geliefert; oder ein Funktionsparameter-Paket sein.

Der Unterschied zwischen Standardargumenten und Standardschablonenargumenten erscheint auf den ersten Blick seltsam, erlaubt aber Konstrukte wie folgt:

%Vor%

Ist das legaler C ++ - Code und wo im Standard kann das gefunden werden?

    
dalle 13.11.2015, 10:40
quelle

1 Antwort

8

Ich kann kein direktes Zitat sehen, das es erlaubt, aber es ist sicherlich durch Auslassung erlaubt:

  

N3337 [temp.param]/11: Wenn ein Template-Parameter einer Klassenvorlage oder Alias-Vorlage ein Standard-Template-Argument hat, muss jedem nachfolgenden Template-Parameter entweder ein Standard-Template-Argument oder ein Template-Parameter übergeben werden   packen. Wenn ein Vorlagenparameter einer Vorlage einer primären Klasse oder einer Aliasvorlage ein Vorlageparameterpaket ist,   es soll der letzte Template-Parameter sein. Ein Template-Parameter-Pack einer Funktionsvorlage soll nicht sein   gefolgt von einem anderen Vorlagenparameter, es sei denn, dieser Vorlagenparameter kann abgeleitet werden oder hat einen Standardwert   Argument (14.8.2).

Dies ist für Klassenvorlagen und Alias-Vorlagen nicht zulässig, aber für Funktionsvorlagen zulässig, da die Parameter, die denen mit Standardwerten folgen, aus den Funktionsargumenten abgeleitet werden können.

    
TartanLlama 13.11.2015, 10:53
quelle