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*c87b03e5Sespie main()
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