template<typename T>
void f1(T var) { }
template<typename T>
void f2(T * var) { }
int main(void)
{
int i;
int * pi;
f1(i); // f1<int>(i); // T == int // OK
f1(pi);// f1<int*>(pi); // T == int * // OK
f2(&i); // f2<int*>(&i); // i is int // &i is int* // T == int * // ???
f2(pi); // f2<int*>(pi); // pi is int * // T == int * // ???
f2(&pi); // f2<int*>(&pi);
}
Почему
f2(&i) оценивается как написано, а не как
int * * ? Шаблонный аргументы используется для подстановки в шаблонный параметр. Шаблонный аргумент имеет тип
int *. Тот же вопрос касается
f2(pi); Что я не так понимаю?