OSDN Git Service

a5419fb9ee95e2afbacb39820fb45f536489a19b
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.old-deja / g++.bugs / 900514_03.C
1 // { dg-do assemble  }
2 // g++ 1.37.1 bug 900514_03
3
4 // g++ fails to flag ERRORs on the following erroneous code.
5
6 // In Section 12.3.2 it says "Defining conversion by both a constructor and
7 // a conversion function can lead to ambiguities."  However in the case below,
8 // the explicit cast syntax disambiguates the constructor as one which
9 // invokes the type conversion operator rather than the conversion.
10
11 // NO, IT DOESN'T.  It's still ambiguous.  --jason 2002-12-03
12
13 // cfront 2.0 passes this test.
14
15 // keywords: user-defined type conversion operator, constructor
16
17 struct t_0_st_0;
18
19 struct t_0_st_1 {
20   int member;
21
22   t_0_st_1 (t_0_st_0&);// { dg-error "" } 
23   t_0_st_1 ();
24 };
25
26 struct t_0_st_0 {
27   int member;
28
29   operator t_0_st_1 ();// { dg-error "" } 
30 };
31
32 t_0_st_0 t_0_st_0_obj0;
33
34 void t_0_assignment ()
35 {
36   t_0_st_1 t_0_st_1_obj0;
37   t_0_st_1 t_0_st_1_obj1;
38   t_0_st_1 t_0_st_1_obj2;
39
40   t_0_st_1_obj0 = t_0_st_0_obj0;                        // { dg-error "" } caught
41   t_0_st_1_obj1 = t_0_st_1 (t_0_st_0_obj0);
42 }
43
44 void t_0_local_init ()
45 {
46   t_0_st_1 t_0_st_1_obj0 = t_0_st_0_obj0;               // { dg-error "" } 
47   t_0_st_1 t_0_st_1_obj1 = t_0_st_1 (t_0_st_0_obj0);
48 }
49
50 struct t_1_st_0;
51
52 struct t_1_st_1 {
53   int member;
54
55   t_1_st_1 (t_1_st_0&);                                 // { dg-error "" } 
56   t_1_st_1 ();
57   void operator= (t_1_st_1&);                           // { dg-error "" } 
58 };
59
60 struct t_1_st_0 {
61   int member;
62
63   operator t_1_st_1 ();                                 // { dg-error "" } 
64 };
65
66 t_1_st_0 t_1_st_0_obj0;
67
68 void t_1_assignment ()
69 {
70   t_1_st_1 t_1_st_1_obj0;
71   t_1_st_1 t_1_st_1_obj1;
72   t_1_st_1 t_1_st_1_obj2;
73
74   t_1_st_1_obj0 = t_1_st_0_obj0;                        // { dg-error "" } 
75   t_1_st_1_obj1 = t_1_st_1 (t_1_st_0_obj0);             // { dg-error "" } 
76 }
77
78 void t_1_local_init ()
79 {
80   t_1_st_1 t_1_st_1_obj0 = t_1_st_0_obj0;               // { dg-error "" } 
81   t_1_st_1 t_1_st_1_obj1 = t_1_st_1 (t_1_st_0_obj0);
82 }
83
84 struct t_2_st_0;
85
86 struct t_2_st_1 {
87   int member;
88
89   t_2_st_1 (t_2_st_0);          // { dg-error "" } candidate
90   t_2_st_1 ();
91 };
92
93 struct t_2_st_0 {
94   int member;
95
96   operator t_2_st_1 ();         // { dg-error "" } candidate
97 };
98
99 t_2_st_0 t_2_st_0_obj0;
100
101 void t_2_assignment ()
102 {
103   t_2_st_1 t_2_st_1_obj0;
104   t_2_st_1 t_2_st_1_obj1;
105   t_2_st_1 t_2_st_1_obj2;
106
107   t_2_st_1_obj0 = t_2_st_0_obj0;                        // { dg-error "" } caught
108   t_2_st_1_obj1 = t_2_st_1 (t_2_st_0_obj0);
109 }
110
111 void t_2_local_init ()
112 {
113   t_2_st_1 t_2_st_1_obj0 = t_2_st_0_obj0;               // { dg-error "" } 
114   t_2_st_1 t_2_st_1_obj1 = t_2_st_1 (t_2_st_0_obj0);
115 }