1 // GROUPS passed conversions
2 // cvt file
3 // From: krste@icsi.berkeley.edu (Krste Asanovic)
4 // Date: Mon, 24 Aug 92 19:05:10 PDT
5 // Message-Id: <9208250205.AA26351@icsib43.ICSI.Berkeley.EDU>
6 // Subject: implicit int. convs. from member refs. in switch expressions
7 
8 #include <cstdio>
9 
10 class A
11 {
12 public:
A(int j)13     A(int j) { i = j; }
A(A & a)14     A(A& a) { i = a.i; }
15     operator int() { return i; }
16 
assign(int v)17     void assign(int v) { i = v; }
18     int i;
19 };
20 
21 class B
22 {
23 public:
B(A & inArg)24     B(A& inArg) : in(inArg), out(0) {}
25 
26     A& in;
27     A out;
28 
29     void run();
30 };
31 
32 void
run()33 B::run()
34 {
35     // I get a "switch quantity not an integer" error for this statement.
36     switch (in)
37     // Replacing above with "switch (int(in))" removes the error.
38     {
39     case 0:
40         out = 1;
41         break;
42     default:
43         out = 0;
44         break;
45     }
46 }
47 
main()48 int main()
49 {
50     A a(1);
51 
52     A& ar = a;
53 
54     A& ar2 = ar;
55 
56     // ....but no errors for this switch statement.
57     switch (ar2)
58     {
59     case 1:
60 	std::printf ("PASS\n");
61         break;
62     default:
63 	{ std::printf ("FAIL\n"); return 1; }
64     }
65 
66     B b(a);
67     a.assign(3);
68     b.run();
69     a.assign(0);
70     b.run();
71 
72     return 0;
73 }
74 
75 
76 
77 
78 
79 
80 
81