template <class T> typename T::value_type func(T & a);
じゃだめなの?