R.14.7 Друзья

R.14.7 Друзья

Функция-друг для шаблона типа не является неявной шаблонной функцией, например:

template‹class T› class task {

 //…

 friend void next_time();

 friend task‹T›* preempt(task‹T›*);

 friend task* prmt(task*); // ошибка

 //…

};

Здесь функция next_time() становится другом всех классов task, а каждый класс task имеет в качестве друга функцию preempt() c соответствующими типами параметров. Функцию preempt() можно определить как шаблон типа.

template‹class T›

task‹T›* preempt(task‹T›* t) {/*… */}

Описание функции prmt() является ошибочным, поскольку типа task не существует, а есть только специальные шаблонные типы task‹int›, task‹record›, и т.д.