template<class T, char SEP, char *STR1>
void lines<T, SEP, *STR1>::read2(istream& is){
...
};

class problem: public <problem, '2', "Error">{
...
};

class solution: public <solution, '3', "Error">{
...
};

このコードをコンパイルすると、

   syntax error : '<'     ← <problem, '2', "Error"> の <

と出てしまうのですが、何がいけないんでしょうか?

   class problem: public lines<problem, '2', "Error">

としても

   invalid template argument for 'STR1', constant expression expected

と出てしまいます。
テンプレートに関して授業でほとんど習っていないのに、いきなり課題で出されて困っています。
どなたか教えてください。