Здраствуйте, . Вы писали:
> > template<class T>
> void fun(T);
> template<class T>
> void fun(T *);
> // template<>
> void fun(int *)
> {
> }
>
> непоняно, как компилятор разбирается, какую я функцию явно
> специализировал (это и мне самому тут непонятно) — а он спокойно
> компилит.
добавим тест
int main()
{
int i = 0;
char c = 0;
fun(i); // fun(T)
fun(&i); // fun(int*)
fun(c); // fun(T)
fun(&c); // fun(T*)
fun( (int*)&c ); // нагло врём о типе параметра - получаем вызов fun(int*)
}
На самом деле это перегрузка функций (специализация применяется только для шаблонных классов). Компилятор выбирает нужную функцию, ориентируясь на тип параметра. Это хорошо видно на последнем примере
Posted via RSDN NNTP Server 1.7 "Bedlam"