Ho questo codice:Parametri del modello predefinito: perché il compilatore si lamenta di non specificare l'argomento del modello?
struct A{};
template<class T = A>
struct B {
void foo() {}
};
B b; //Error: missing template arguments before 'b'
//Error: expected ';' before 'b'
//More errors
b.foo()
Se faccio foo()
in funzione modello con lo stesso modello di 'firma', il compilatore non lamentarsi di non specificare gli argomenti di modello:
struct A {};
struct B {
template<class T = A>
void foo() {}
};
B b; //OK
b.foo()
Quindi, perché devo specificare un argomento per una classe template con un parametro predefinito, ma non per una funzione template? C'è qualche sottigliezza che mi manca?
Il motivo è a causa di errore di deduzione argomento modello di sicuro. Ma voglio sapere perché.
C'è una parola mancante nel titolo di questa domanda? – Pointy
Sì. Manca la parola - si lamentano. Aggiunto. – badmaash
Possibile duplicato di * [argomenti modello predefiniti per modelli di funzioni] (http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates) *. –