素朴な疑問なんだけど
template<class T, class U>
を
template<typename T, typename U>
とは書かないの?