Das folgende Stück Code auf gcc-4.7.1 nicht kompiliert:Kann die Funktion Standard-Template-Parameter vor nicht standardmäßigen gesetzt werden?
struct X {};
template <class T = X, typename U>
void f(const U& m) {
}
int main() {
f<>(0);
}
Dies ist jedoch ein nicht:
struct X {};
template <class T = X, typename U>
void f(const U& m) {
auto g = []() {};
}
int main() {
f<>(0);
}
gcc-4.7.1 klagt:
c.cpp: In function 'void f(const U&)':
c.cpp:5:15: error: no default argument for 'U'
Also meine Frage ist: setzt Default-Parameter vor nicht-Standard-Parameter in Funktionsvorlage korrigieren? Wenn ja, warum kompiliert der zweite nicht? Wenn nein, warum kompiliert der erste? Wie sagt der C++ 11 Standard über diese Syntax?
http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates – Andrew
@Andrew, der Beitrag, den Sie gaben, ist zu lang. Können Sie darauf hinweisen, welche Antwort besagt, ob es richtig ist, Default-Parameter vor Nicht-Standard-Parameter zu setzen? –
@icando: Im Standard gibt es nichts, was * verbietet * das Setzen von Standardschablonenargumenten für Funktionsschablonen irgendwo. Nur * class * -Templates sind eingeschränkt. –