Только класс может объявить, кто его друзья. Их нельзя вводить извне. Это просто имеет смысл: если бы это было разрешено языком, он мог бы вообще забыть о приватном ключевом слове, ведь любой код, предназначенный для доступа к приватным членам, мог просто использовать этот трюк. Обратите внимание, что добавление отношения «друг» в производный объект не поможет, так как метод недоступен из производного шаблона.
Любой другой подход, который вы можете попробовать, является хакерским и непереносимым (переписывание того же заголовка с изменением private
для public
, похоже, будет работать во многих ситуациях, но в некоторых угловых случаях оно не будет работать).
Также обратите внимание, что в шаблоне класса вы не можете объявить аргумент типа как друга, это явно запрещено в текущем стандарте, даже если это ограничение будет снято в следующем стандарте.