friend void doSomething2(T);
, вы объявляете новую не шаблонную функцию с именем doSomething2
как friend
, что не соответствует ожиданиям.
Необходимо указать, что doSomething2
- это шаблон функции, например,
friend void doSomething2<T>(T);
// ^^^
Или воспользуйтесь выводом аргумента шаблона и просто напишите
friend void doSomething2<>(T);
// ^^
ЖИТЬ