// Build don't link:
// Origin: Loring Holden <lsh@cs.brown.edu> 

template <class T>
class REFptr {
   public:
      virtual ~REFptr();
      REFptr<T> &operator =  (const REFptr<T>& p);
};

class STR { };
class str_ptr : public REFptr<STR> { };

template <class T>
class ARRAY {
 protected:
   T      *_array; 
   int     _num;   
   int     _max;  
 public:
   virtual void realloc(int new_max) {
       _max = new_max;
       T *tmp = new T [_max];
       if (tmp == 0) return;
       for (int i=0; i<_num; i++) {
          tmp[i] = _array[i];
       }
       delete [] _array;
       _array = tmp;
   }
};

int
main()
{
   ARRAY<str_ptr> tags;
}
