comparison gcc/testsuite/g++.dg/cpp0x/ref-qual19.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
comparison
equal deleted inserted replaced
111:04ced10e8804 131:84e7813d76e9
1 // PR c++/87109
2 // { dg-do run { target c++11 } }
3
4 #include <utility>
5
6 struct C { int i; };
7 struct D { int i; };
8
9 struct A {
10 int j;
11 operator C() & { return { 1 }; }
12 operator C() && { return { 2 }; }
13 };
14
15 struct B : public A {
16 operator D() & { return { 3 }; }
17 operator D() && { return { 4 }; }
18 };
19
20 C
21 f (A a)
22 {
23 return a;
24 }
25
26 C
27 f2 (A a)
28 {
29 return std::move (a);
30 }
31
32 C
33 f3 ()
34 {
35 A a;
36 return a;
37 }
38
39 C
40 f4 ()
41 {
42 A a;
43 return std::move (a);
44 }
45
46 C
47 f5 ()
48 {
49 return A();
50 }
51
52 D
53 f6 (B b)
54 {
55 return b;
56 }
57
58 D
59 f7 (B b)
60 {
61 return std::move (b);
62 }
63
64 D
65 f8 ()
66 {
67 B b;
68 return b;
69 }
70
71 D
72 f9 ()
73 {
74 B b;
75 return std::move (b);
76 }
77
78 D
79 f10 ()
80 {
81 return B();
82 }
83
84 int
85 main ()
86 {
87 C c1 = f (A());
88 if (c1.i != 2)
89 __builtin_abort ();
90 C c2 = f2 (A());
91 if (c2.i != 2)
92 __builtin_abort ();
93 C c3 = f3 ();
94 if (c3.i != 2)
95 __builtin_abort ();
96 C c4 = f4 ();
97 if (c4.i != 2)
98 __builtin_abort ();
99 C c5 = f5 ();
100 if (c5.i != 2)
101 __builtin_abort ();
102 D c6 = f6 (B());
103 if (c6.i != 4)
104 __builtin_abort ();
105 D c7 = f7 (B());
106 if (c7.i != 4)
107 __builtin_abort ();
108 D c8 = f8 ();
109 if (c8.i != 4)
110 __builtin_abort ();
111 D c9 = f9 ();
112 if (c9.i != 4)
113 __builtin_abort ();
114 D c10 = f10 ();
115 if (c10.i != 4)
116 __builtin_abort ();
117 }