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
8
9#include <cstdio>
10
11class A
12{
13public:
14    A(int j) { i = j; }
15    A(A& a) { i = a.i; }
16    operator int() { return i; }
17
18    void assign(int v) { i = v; }
19    int i;
20};
21
22class B
23{
24public:
25    B(A& inArg) : in(inArg), out(0) {}
26
27    A& in;
28    A out;
29
30    void run();
31};
32
33void
34B::run()
35{
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    }
47}
48
49int main()
50{
51    A a(1);
52
53    A& ar = a;
54
55    A& ar2 = ar;
56
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    }
66
67    B b(a);
68    a.assign(3);
69    b.run();
70    a.assign(0);
71    b.run();
72
73    return 0;
74}
75
76
77
78
79
80
81
82