Qubc
@Qubc
Ненавижу полисемию.

Почему int * оценивается как int * вместо int * * при подстановке в шаблонный параметр?

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); Что я не так понимаю?
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы