Rebase.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / rv1n.C
blob204ca31a00d7b317d4aef42efd88f66233466767
1 // I, Howard Hinnant, hereby place this code in the public domain.
3 // Test overload resolution among reference types
5 // { dg-do compile { target c++11 } }
7 template <bool> struct sa;
8 template <> struct sa<true> {};
10 struct one   {char x[1];};
11 struct two   {char x[2];};
12 struct three {char x[3];};
13 struct four  {char x[4];};
14 struct five  {char x[5];};
15 struct six   {char x[6];};
16 struct seven {char x[7];};
17 struct eight {char x[8];};
19 struct A
21     A();
22     A(const volatile A&&);
25                A    source();
26 const          A  c_source();
27       volatile A  v_source();
28 const volatile A cv_source();
30 // 1 at a time
32 one   sink_1_1(               A&);  // { dg-message "" }
34 int test1_1()
36                    A a;
37     const          A ca = a;    // { dg-error "deleted" }
38           volatile A va;
39     const volatile A cva = a;   // { dg-error "deleted" }
40     sink_1_1(ca);           // { dg-error "" }
41     sink_1_1(va);           // { dg-error "" }
42     sink_1_1(cva);          // { dg-error "" }
43     sink_1_1(source());     // { dg-error "" }
44     sink_1_1(c_source());   // { dg-error "" }
45     sink_1_1(v_source());   // { dg-error "" }
46     sink_1_1(cv_source());  // { dg-error "" }
47     return 0;
50 two   sink_1_2(const          A&);  // { dg-message "" }
52 int test1_2()
54                    A a;
55     const          A ca = a; // { dg-error "deleted" }
56           volatile A va;
57     const volatile A cva = a; // { dg-error "deleted" }
58     sink_1_2(va);           // { dg-error "" }
59     sink_1_2(cva);          // { dg-error "" }
60     sink_1_2(v_source());   // { dg-error "" }
61     sink_1_2(cv_source());  // { dg-error "" }
62     return 0;
65 three sink_1_3(volatile       A&);  // { dg-message "" }
67 int test1_3()
69                    A a;
70     const          A ca = a; // { dg-error "deleted" }
71           volatile A va;
72     const volatile A cva = a; // { dg-error "deleted" }
73     sink_1_3(ca);           // { dg-error "" }
74     sink_1_3(cva);          // { dg-error "" }
75     sink_1_3(source());     // { dg-error "" }
76     sink_1_3(c_source());   // { dg-error "" }
77     sink_1_3(v_source());   // { dg-error "" }
78     sink_1_3(cv_source());  // { dg-error "" }
79     return 0;
82 four  sink_1_4(const volatile A&);  // { dg-message "" }
84 int test1_4()
86                    A a;
87     const          A ca = a; // { dg-error "deleted" }
88           volatile A va;
89     const volatile A cva = a; // { dg-error "deleted" }
90     sink_1_4(source());     // { dg-error "" }
91     sink_1_4(c_source());   // { dg-error "" }
92     sink_1_4(v_source());   // { dg-error "" }
93     sink_1_4(cv_source());  // { dg-error "" }
94     return 0;
97 five  sink_1_5(               A&&);  // { dg-message "" }
99 int test1_5()
101                    A a;
102     const          A ca = a; // { dg-error "deleted" }
103           volatile A va;
104     const volatile A cva = a; // { dg-error "deleted" }
105     sink_1_5(a);                // { dg-error "lvalue" }
106     sink_1_5(ca);           // { dg-error "" }
107     sink_1_5(va);           // { dg-error "" }
108     sink_1_5(cva);          // { dg-error "" }
109     sink_1_5(c_source());   // { dg-error "" }
110     sink_1_5(v_source());   // { dg-error "" }
111     sink_1_5(cv_source());  // { dg-error "" }
112     return 0;
115 six   sink_1_6(const          A&&);  // { dg-message "" }
117 int test1_6()
119                    A a;
120     const          A ca = a; // { dg-error "deleted" }
121           volatile A va;
122     const volatile A cva = a; // { dg-error "deleted" }
123     sink_1_6(a);                // { dg-error "lvalue" }
124     sink_1_6(ca);               // { dg-error "lvalue" }
125     sink_1_6(va);           // { dg-error "" }
126     sink_1_6(cva);          // { dg-error "" }
127     sink_1_6(v_source());   // { dg-error "" }
128     sink_1_6(cv_source());  // { dg-error "" }
129     return 0;
132 seven sink_1_7(volatile       A&&);  // { dg-message "" }
134 int test1_7()
136                    A a;
137     const          A ca = a; // { dg-error "deleted" }
138           volatile A va;
139     const volatile A cva = a; // { dg-error "deleted" }
140     sink_1_7(a);            // { dg-error "lvalue" }
141     sink_1_7(ca);           // { dg-error "" }
142     sink_1_7(va);           // { dg-error "lvalue" }
143     sink_1_7(cva);          // { dg-error "" }
144     sink_1_7(c_source());   // { dg-error "" }
145     sink_1_7(cv_source());  // { dg-error "" }
146     return 0;
149 eight sink_1_8(const volatile A&&); // { dg-message "" }
151 int test1_8()
153                    A a;
154     const          A ca = a; // { dg-error "deleted" }
155           volatile A va;
156     const volatile A cva = a; // { dg-error "deleted" }
157     sink_1_8(a);                // { dg-error "lvalue" }
158     sink_1_8(ca);               // { dg-error "lvalue" }
159     sink_1_8(va);               // { dg-error "lvalue" }
160     sink_1_8(cva);              // { dg-error "lvalue" }
161     return 0;
164 int main()
166     return test1_1() + test1_2() + test1_3() + test1_5() +
167            test1_6() + test1_7();