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: <9211301118.AA09810@ss670mp.geco.slb.com>
6*c87b03e5Sespie // From: willoch@ss670mp.oslo.sgp.slb.com (thorbjorn willoch)
7*c87b03e5Sespie // Subject: -fansi-exceptions bug
8*c87b03e5Sespie // Date: Mon, 30 Nov 92 11:18:05 GMT
9*c87b03e5Sespie 
10*c87b03e5Sespie extern "C" int printf(const char *, ...);
11*c87b03e5Sespie 
12*c87b03e5Sespie class Vector
13*c87b03e5Sespie {
14*c87b03e5Sespie     int* p;
15*c87b03e5Sespie     int sz;
16*c87b03e5Sespie   public:
Vector(int s)17*c87b03e5Sespie     Vector(int s) { p = new int[sz=s]; }
~Vector()18*c87b03e5Sespie     ~Vector() {delete [] p; }
size()19*c87b03e5Sespie     int size() {return sz; }
20*c87b03e5Sespie     class Range{};
21*c87b03e5Sespie 
22*c87b03e5Sespie 
23*c87b03e5Sespie     int& operator[](int i);
24*c87b03e5Sespie };
25*c87b03e5Sespie 
26*c87b03e5Sespie int& Vector::operator[](int i)
27*c87b03e5Sespie {
28*c87b03e5Sespie     if(0<=i && i<sz) return p[i];
29*c87b03e5Sespie     throw Range();
30*c87b03e5Sespie }
31*c87b03e5Sespie 
do_something(Vector & v)32*c87b03e5Sespie void do_something(Vector& v)
33*c87b03e5Sespie {
34*c87b03e5Sespie     int i = v[v.size()+10];
35*c87b03e5Sespie }
36*c87b03e5Sespie 
main()37*c87b03e5Sespie main()
38*c87b03e5Sespie {
39*c87b03e5Sespie     Vector v(10);
40*c87b03e5Sespie 
41*c87b03e5Sespie     try
42*c87b03e5Sespie     {
43*c87b03e5Sespie         do_something(v);
44*c87b03e5Sespie     }
45*c87b03e5Sespie 
46*c87b03e5Sespie     catch (Vector::Range)
47*c87b03e5Sespie     {
48*c87b03e5Sespie         printf("Range error exception\n");
49*c87b03e5Sespie     }
50*c87b03e5Sespie }
51