Вам необходимо включить
#include <iostream>
Во время создания шаблона функции.Возможно, вы включили только
#include <iosfwd>
Кроме того, вы не должны определять (статического) друга в качестве шаблона: https://ideone.com/1HRlZ
#include <iostream>
template <typename> class test;
template <>
class test<int> {
int y;
public:
test(int k) : y(k) {}
friend std::ostream& operator<<(std::ostream& os, const test& t);
};
std::ostream& operator<< (std::ostream& os, const test<int>& t)
{
return os << t.y;
}
int main()
{
test<int> a(42);
std::cout << a << std::endl;
}
Обратите внимание, что это не такхорошая идея использовать 'namespace std' в вашем заголовочном файле, поэтому я удалил его из примера.( Это может вызвать конфликты у пользователей вашего заголовочного файла, если они включают ваш заголовок )