// Build don't link: // GROUPS passed templates template class Vector { int sz; T *v; public: Vector (int s) : sz (s) { v = new T[sz]; } ~Vector () { delete[] v; } T &operator[] (int i) { return v[i]; } int size () { return sz; } }; template// ERROR - previous definition of T struct Comparator { typedef T T;// ERROR - use of template type T in typedef to T static int lessthan (T &a, T &b) { return a < b; } }; template struct Sort { static void sort (Vector &);// ERROR - use of bad T }; template void Sort::sort (Vector &v)// ERROR - use of bad T { int n = v.size (); for (int i = 0; i < n - 1; i++) for (int j = n - 1; i < j; j--) if (Comp::lessthan (v[j], v[j - 1])) { typename Comp::T temp = v[j]; v[j] = v[j - 1]; v[j - 1] = temp; } } void f (Vector &vi) { Sort >::sort (vi); }