g++ 2.95.3だと
T::iterator it = vec.begin(), end_it = vec.end();
を
typename T::iterator it = vec.begin(), end_it = vec.end();
って書かないとだめなんだけど、誰か解説プリーズ