2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.law / cvt7.C
blobe68adf02106fba27c3c83c34c71a6a2b7948a1ed
1 // { dg-do run  }
2 // GROUPS passed conversions
3 // cvt file
4 // From: krste@icsi.berkeley.edu (Krste Asanovic)
5 // Date: Mon, 24 Aug 92 19:05:10 PDT
6 // Message-Id: <9208250205.AA26351@icsib43.ICSI.Berkeley.EDU>
7 // Subject: implicit int. convs. from member refs. in switch expressions
9 #include <cstdio>
11 class A
13 public:
14     A(int j) { i = j; }
15     A(A& a) { i = a.i; }
16     operator int() { return i; }
18     void assign(int v) { i = v; }
19     int i;
22 class B
24 public:
25     B(A& inArg) : in(inArg), out(0) {}
27     A& in;
28     A out;
30     void run();
33 void
34 B::run()
36     // I get a "switch quantity not an integer" error for this statement.
37     switch (in)
38     // Replacing above with "switch (int(in))" removes the error.
39     {
40     case 0:
41         out = 1;
42         break;
43     default:
44         out = 0;
45         break;
46     }
49 int main()
51     A a(1);
53     A& ar = a;
55     A& ar2 = ar;
57     // ....but no errors for this switch statement.
58     switch (ar2)
59     {
60     case 1:
61         std::printf ("PASS\n");
62         break;
63     default:
64         { std::printf ("FAIL\n"); return 1; }
65     }
67     B b(a);
68     a.assign(3);
69     b.run();
70     a.assign(0);
71     b.run();
73     return 0;