Mentre imparavo e sperimentavo con i modelli, mi sono imbattuto in qualcosa che non riuscivo a comprendere pienamente.Come vengono risolti/dedotti gli argomenti dei template?
class sample
{
public:
sample(int a = 0) {}
};
template <typename T1,typename T2>
void add(T1 a) // Replace T1 with T2 resolves compilation error.
{}
int main()
{
add<sample>(3);
return 0;
}
Il codice sopra riportato genera errore di compilazione (sia 03 che C++ 0x). Ma quando cambio il tipo di argomento di add da T1 a T2, è ok. Con nm, il prototipo creato è add (sample, int) [T1 = sample, T2 = int]. Perché la compilazione fallisce con T1 come tipo di argomento ma non T2?