Вы можете сделать функцию-член шаблоном функции:
template<int ret_degree>
Polynomial<ret_degree> derivative() { /* returns a different template */ }
Или, если вы знаете степень полинома возврата, вы можете сделать что-то вроде этого:
Polynomial<degree-1> derivative() { /* returns a different template */ }