/* { dg-do compile } */ /* { dg-options "-O2" } */ namespace Gambit { template < class T > class Array { protected:int mindex, maxdex; T *data; int InsertAt (const T & t, int n) { T *new_data = new T[++this->maxdex - this->mindex + 1] - this->mindex; int i; for (i = this->mindex; i <= n - 1; i++) new_data[i] = this->data[i]; } public: Array (unsigned int len = 0):mindex (1), maxdex (len), data ((len) ? new T[len] - 1 : 0) { } virtual ~ Array () { if (maxdex >= mindex) delete[](data + mindex); } const T & operator[] (int index) const { } int Append (const T & t) { return InsertAt (t, this->maxdex + 1); } }; } class gIndexOdometer { private:Gambit::Array < int >MinIndices; Gambit::Array < int >CurIndices; gIndexOdometer (const Gambit::Array < int >, const Gambit::Array < int >); void SetIndex (const int &, const int &); int NoIndices () const; gIndexOdometer AfterExcisionOf (int &) const; }; gIndexOdometer gIndexOdometer::AfterExcisionOf (int &to_be_zapped) const { Gambit::Array < int >NewMins, NewMaxs; int i; for (i = 1; i <= NoIndices (); i++) { NewMins.Append (MinIndices[i]); } gIndexOdometer NewOdo (NewMins, NewMaxs); NewOdo.SetIndex (i, CurIndices[i]); }