Полагаю, это то, что вы имеете в виду: (Это может быть неверный код, я только пытаюсь перевести то, что вы написали)
template<typename T> struct print<T*, unsigned int> {
typedef unsigned int Index;
typedef std::ostream OutStream;
typedef char CharType;
print(CharType delimiter = ' '): delimiter_(delimiter) {}
OutStream &operator()(T const *toPrint, Index startIndex, Index finishIndex, OutStream &outStream = std::cout) const {
for (Index i(startIndex) ; i < finishIndex ; ++i)
outStream << toPrint[i] << delimiter_;
return outStream;
}
protected:
CharType delimiter_;
};
Компилятор объясняет, что пошло не так:
аргументы по умолчанию не допускаются при частичной специализации
Значения типа typename Index = unsigned int
могут появляться только в неспециализированном шаблоне.
параметр шаблона не используетсяили вычитается при частичной специализации
То есть вы должны использовать все параметры в этой части: struct print<HERE>