Почему есть ошибка в этом коде:функция члена шаблона обрабатывается только если называется
template <typename T>
class CLs{
public:
void print(T* p){ p->print(); }
};
void main() {
CLs<int> c1; // compilation OK
CLs<double> c2; // compilation OK
double d=3;
c2.print(&d);
}
Мой преподаватель сказал, что есть ошибка в c2.print(&d);
линии:
Compilation Error: Member function is instantiated only if called.
Что он имеет в виду?
переменная 'd' имеет тип' double', поэтому, когда вы вызываете 'c2.print (& d)' в теле функции, это как вызов 'd.print()', но d является конкретным типом и doesn ' t имеет функцию-член 'print'. – 101010