OSDN Git Service

PR c++/37256
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / rv1n.C
1 // I, Howard Hinnant, hereby place this code in the public domain.
2
3 // Test overlaod resolution among referece types
4
5 // { dg-do compile }
6 // { dg-options "-std=c++0x" }
7
8 template <bool> struct sa;
9 template <> struct sa<true> {};
10
11 struct one   {char x[1];};
12 struct two   {char x[2];};
13 struct three {char x[3];};
14 struct four  {char x[4];};
15 struct five  {char x[5];};
16 struct six   {char x[6];};
17 struct seven {char x[7];};
18 struct eight {char x[8];};
19
20 struct A
21 {
22     A();
23     A(const volatile A&&);
24 };
25
26                A    source();
27 const          A  c_source();
28       volatile A  v_source();
29 const volatile A cv_source();
30
31 // 1 at a time
32
33 one   sink_1_1(               A&);  // { dg-error "" }
34
35 int test1_1()
36 {
37                    A a;
38     const          A ca = a;
39           volatile A va;
40     const volatile A cva = a;
41     sink_1_1(ca);           // { dg-error "invalid initialization" }
42     sink_1_1(va);           // { dg-error "invalid initialization" }
43     sink_1_1(cva);          // { dg-error "invalid initialization" }
44     sink_1_1(source());     // { dg-error "invalid initialization" }
45     sink_1_1(c_source());   // { dg-error "invalid initialization" }
46     sink_1_1(v_source());   // { dg-error "invalid initialization" }
47     sink_1_1(cv_source());  // { dg-error "invalid initialization" }
48     return 0;
49 }
50
51 two   sink_1_2(const          A&);  // { dg-error "" }
52
53 int test1_2()
54 {
55                    A a;
56     const          A ca = a;
57           volatile A va;
58     const volatile A cva = a;
59     sink_1_2(va);           // { dg-error "invalid initialization" }
60     sink_1_2(cva);          // { dg-error "invalid initialization" }
61     sink_1_2(v_source());   // { dg-error "invalid initialization" }
62     sink_1_2(cv_source());  // { dg-error "invalid initialization" }
63     return 0;
64 }
65
66 three sink_1_3(volatile       A&);  // { dg-error "" }
67
68 int test1_3()
69 {
70                    A a;
71     const          A ca = a;
72           volatile A va;
73     const volatile A cva = a;
74     sink_1_3(ca);           // { dg-error "invalid initialization" }
75     sink_1_3(cva);          // { dg-error "invalid initialization" }
76     sink_1_3(source());     // { dg-error "invalid initialization" }
77     sink_1_3(c_source());   // { dg-error "invalid initialization" }
78     sink_1_3(v_source());   // { dg-error "invalid initialization" }
79     sink_1_3(cv_source());  // { dg-error "invalid initialization" }
80     return 0;
81 }
82
83 four  sink_1_4(const volatile A&);  // { dg-error "" }
84
85 int test1_4()
86 {
87                    A a;
88     const          A ca = a;
89           volatile A va;
90     const volatile A cva = a;
91     sink_1_4(source());     // { dg-error "invalid initialization" }
92     sink_1_4(c_source());   // { dg-error "invalid initialization" }
93     sink_1_4(v_source());   // { dg-error "invalid initialization" }
94     sink_1_4(cv_source());  // { dg-error "invalid initialization" }
95     return 0;
96 }
97
98 five  sink_1_5(               A&&);  // { dg-error "" }
99
100 int test1_5()
101 {
102                    A a;
103     const          A ca = a;
104           volatile A va;
105     const volatile A cva = a;
106     sink_1_5(ca);           // { dg-error "invalid initialization" }
107     sink_1_5(va);           // { dg-error "invalid initialization" }
108     sink_1_5(cva);          // { dg-error "invalid initialization" }
109     sink_1_5(c_source());   // { dg-error "invalid initialization" }
110     sink_1_5(v_source());   // { dg-error "invalid initialization" }
111     sink_1_5(cv_source());  // { dg-error "invalid initialization" }
112     return 0;
113 }
114
115 six   sink_1_6(const          A&&);  // { dg-error "" }
116
117 int test1_6()
118 {
119                    A a;
120     const          A ca = a;
121           volatile A va;
122     const volatile A cva = a;
123     sink_1_6(va);           // { dg-error "invalid initialization" }
124     sink_1_6(cva);          // { dg-error "invalid initialization" }
125     sink_1_6(v_source());   // { dg-error "invalid initialization" }
126     sink_1_6(cv_source());  // { dg-error "invalid initialization" }
127     return 0;
128 }
129
130 seven sink_1_7(volatile       A&&);  // { dg-error "" }
131
132 int test1_7()
133 {
134                    A a;
135     const          A ca = a;
136           volatile A va;
137     const volatile A cva = a;
138     sink_1_7(ca);           // { dg-error "invalid initialization" }
139     sink_1_7(cva);          // { dg-error "invalid initialization" }
140     sink_1_7(c_source());   // { dg-error "invalid initialization" }
141     sink_1_7(cv_source());  // { dg-error "invalid initialization" }
142     return 0;
143 }
144
145 int main()
146 {
147     return test1_1() + test1_2() + test1_3() + test1_5() +
148            test1_6() + test1_7();
149 }