C++ Standard Abschnitt 8.3.6.4 sagt, dassWarum kann das Standardargument später nicht in den Vorlagenfunktionen hinzugefügt werden?
Für Nicht-Template-Funktionen, Standardargumente später Erklärungen einer Funktion im gleichen Umfang aufgenommen in werden können. [...]
Aber meine Frage ist, warum es für Vorlagenfunktionen nicht erlaubt ist? Was ist der Grund dafür, das Hinzufügen von Standardargumenten in späteren Deklarationen im selben Gültigkeitsbereich für Vorlagenfunktionen nicht zuzulassen?
Betrachten Sie dieses Programm, das gut kompiliert. (Non Template-Funktion) (siehe Live-Demo here.)
#include <iostream>
int f(int a,int b,int c=3);
int f(int a,int b=9,int c); // default argument in middle, ok allowed
int main()
{
f(3);
f(3,6);
f(3,6,9);
return 0;
}
int f(int a,int b,int c)
{
std::cout<<a<<' '<<b<<' '<<c<<'\n';
return 0;
}
Aber nach nicht in der Zusammenstellung. (Template-Funktion) (siehe Live-Demo here.)
#include <iostream>
template <typename T>
void f(T a,int b,int c=3);
template <typename T>
void f(T a,int b=9,int c); // compiler error why???
int main()
{
f(3);
f(3,6);
f(3,6,9);
return 0;
}
template <typename T>
void f(T a,int b,int c)
{
std::cout<<a<<' '<<b<<' '<<c<<'\n';
}
Fehlende 'Vorlage'? –
LogicStuff
Ist das nicht weniger * Addition * und mehr * Neudefinition * von Standardargumenten? – jaggedSpire
[Hier ist] (http://coliru.stacked-crooked.com/a/39117b9aa49c90a4) ein fast kompilierendes Beispiel – jaggedSpire