// { dg-do run { xfail sparc64-*-elf arm-*-pe } } // { dg-options "-fexceptions" } // prms-id: 11667 extern "C" int printf(const char *,...); template < class T > class LIST { public: LIST() { nitems = 16; items = new T[nitems]; }; LIST(int u) { nitems = u; items = new T[nitems]; }; T& operator[](int i) const { return items[i]; } void grow(int n) { T* newlist = new T[n]; T* src = items; T* dst = newlist; int i = nitems; try { while (i--) *dst++ = *src++; } catch (...) { delete[] newlist; throw; } if (items) delete[] items; nitems = n; items = newlist; } private: int nitems; T *items; }; int main(int argc, char **argv) { int i; LIST<int> mylist(10); printf("Start dumping initial 10 item list\n"); for (i = 0; i < 10 ; i++) { mylist[i] = i; printf("%d\n", mylist[i]); } printf("Growing list to 20\n"); mylist.grow(20); printf("Start dumping grown 20 item list\n"); for (i = 0; i < 20; i++) { mylist[i] = i; printf("%d\n", mylist[i]); } return 0; }