il seguente pezzo di codice non compila il gcc-4.7.1:È possibile inserire parametri predefiniti del modello prima di quelli non predefiniti?
struct X {};
template <class T = X, typename U>
void f(const U& m) {
}
int main() {
f<>(0);
}
Tuttavia, questo non lo fa:
struct X {};
template <class T = X, typename U>
void f(const U& m) {
auto g = []() {};
}
int main() {
f<>(0);
}
gcc-4.7.1 si lamenta:
c.cpp: In function 'void f(const U&)':
c.cpp:5:15: error: no default argument for 'U'
Quindi la mia domanda è: sta mettendo i parametri predefiniti prima che i parametri non predefiniti corretti nel modello di funzione? Se sì, perché non compila il secondo? Se no, perché compila il primo? Come dice lo standard C++ 11 riguardo questa sintassi?
http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates – Andrew
@Andrew, il post che hai dato è troppo lungo. Puoi indicare quale risposta dice se è corretto inserire i parametri di default prima di quelli non di default? –
@icando: non c'è nulla nello standard che * proibisca * di mettere argomenti modello predefiniti per i modelli di funzione ovunque. Solo i modelli * di classe * sono limitati. –