Listing 2: Alternative implementation for non-zero based arrays

template <class T>
class Array {
  int low, high;
  T *value;
public:
  Array(int l, int h) : low(l), high(h) {
    value = new T[high-low+1] - low;
  }
  ~Array() // just say delete to leaks 
  { delete [] (value + low); }  
  T & operator [](int i) {
    if (i >= low && i <= high)
      return value[i];
    else {
      // why not just throw an exception here?
      error();
      return value[low];
    }
  }
};
//End of File