Sometimes it is tempting to let a pointer point to a location that is slightly beyond an array's index range. For example, consider the following self-defined array class, which allows you to define arrays whose index ranges do not necessarily start at zero:


Code:
    template 
     class MyArray
       {
         T*  ptr;
         int f, l;
       public:
         MyArray (int first, int last)
           : f(first), l(last)
           {
             ptr = new T [last-first+1];  // Why +1?
             ptr -= first;
           }
         T& operator[] (int index)
           {
             return ptr[index];
           }
         // Further methods
       };
The trick is simple and elegant and might result in very efficient code: Since the address stored in ptr differs from the address of the real array by the value of first, first need not be subtracted from index in operator[]. A neat trick, right?

Unfortunately, the C++ standard draft says that a call to operator[] would result in undefined behavior. Even if it runs fine on your system, there are definitely systems on which this is not the case. An expression with pointer arithmetics is well defined only if all involved pointers and all results of partial expressions point to elements of one--and only one--array.