1 // { dg-do assemble  }
2 // Test for proper handling of type lookup for conversion operator names.
3 
4 // Test 1: Only at file scope
5 typedef int B;
6 struct A
7 {
8   int B;
9   operator B *(); // { dg-error "" }
10 };
11 
12 A::operator B * () // { dg-error "" }
13 {
14   return 0;
15 }
16 
17 // Test 2: Only at class scope
18 struct C
19 {
20   typedef int D;
21   operator D *();
22 };
23 
24 int D;
25 C::operator D * ()
26 {
27   return 0;
28 }
29 
30 // Test 3: Matching
31 struct E
32 {
33   typedef int F;
34   operator F *();
35 };
36 
37 typedef int F;
38 E::operator F * ()
39 {
40   return 0;
41 }
42 
43 // Test 4: Conflicting
44 struct G
45 {
46   typedef int H;
47   operator H *();
48 };
49 
50 typedef double H;
51 G::operator H * ()
52 {
53   return 0;
54 }
55