1*c87b03e5Sespie // Build don't link: 2*c87b03e5Sespie // Special g++ Options: -fexceptions 3*c87b03e5Sespie // GROUPS passed exceptions 4*c87b03e5Sespie // except file 5*c87b03e5Sespie // Message-Id: <199311101607.AA11803@hsi86.hsi.com> 6*c87b03e5Sespie // From: Grigory Tsipenyuk <grigory@hsi.com> 7*c87b03e5Sespie // Subject: exception's bug? 8*c87b03e5Sespie // Date: Wed, 10 Nov 1993 11:07:12 -0500 9*c87b03e5Sespie 10*c87b03e5Sespie #include <iostream> 11*c87b03e5Sespie 12*c87b03e5Sespie class X { 13*c87b03e5Sespie int *a; 14*c87b03e5Sespie int sz; 15*c87b03e5Sespie public: 16*c87b03e5Sespie class range { }; // exception class X(int s)17*c87b03e5Sespie X(int s) { a=new int[sz=s]; } 18*c87b03e5Sespie int& operator[](int i); 19*c87b03e5Sespie }; 20*c87b03e5Sespie 21*c87b03e5Sespie int& X::operator[](int i) 22*c87b03e5Sespie { 23*c87b03e5Sespie if (i < 0 || i >= sz) { 24*c87b03e5Sespie throw range(); 25*c87b03e5Sespie } 26*c87b03e5Sespie return a[i]; 27*c87b03e5Sespie } 28*c87b03e5Sespie 29*c87b03e5Sespie int main()30*c87b03e5Sespiemain() 31*c87b03e5Sespie { 32*c87b03e5Sespie X c(10); 33*c87b03e5Sespie try { 34*c87b03e5Sespie for (int i = 0; i < 12; i++) 35*c87b03e5Sespie c[i] = 1; 36*c87b03e5Sespie } catch (X::range) { 37*c87b03e5Sespie std::cerr << "invalid range\n"; 38*c87b03e5Sespie } 39*c87b03e5Sespie return 0; 40*c87b03e5Sespie } 41