Вам нужна перегрузка , а не специализация (есть только полная специализация для шаблонов функций).
template <typename T, size_t N>
void output (std::array<T,N> &arr);
Вы не можете поместить его в namespace std
. И если он просто выводит данные, вы не должны передавать неконстантную ссылку.
Однако идите по пути, по которому идет стандартная библиотека, и используйте вместо этого итераторы:
template <typename Iter>
void output (Iter it, Iter end)
Это делает вашу функцию гибкой w.r.t. тип контейнера: вероятно, ему не нужно знать, является ли это list
, deque
или array
.