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()33B::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()48int 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