* decl.c (make_typename_type): s/parameters/arguments/.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / rv1p.C
bloba9097276d5a008ff1d0ed572f016c0b69ba1e769
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 } }
6 // { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } }
7 // { dg-additional-options "-fno-ipa-icf" }
9 template <bool> struct sa;
10 template <> struct sa<true> {};
12 struct one   {long x[1];};
13 struct two   {long x[2];};
14 struct three {long x[3];};
15 struct four  {long x[4];};
16 struct five  {long x[5];};
17 struct six   {long x[6];};
18 struct seven {long x[7];};
19 struct eight {long x[8];};
21 struct A
23     A();
24     A(const volatile A&&);
27                A    source();
28 const          A  c_source();
29       volatile A  v_source();
30 const volatile A cv_source();
32 // 1 at a time
34 one   sink_1_1(               A&);
36 int test1_1()
38                    A a;
39     const          A ca;
40           volatile A va;
41     const volatile A cva;
42     sa<sizeof(sink_1_1(a))           == 1 * sizeof(long)> t1;
43     return 0;
46 two   sink_1_2(const          A&);
48 int test1_2()
50                    A a;
51     const          A ca;
52           volatile A va;
53     const volatile A cva;
54     sa<sizeof(sink_1_2(a))           == 2 * sizeof(long)> t1;
55     sa<sizeof(sink_1_2(ca))          == 2 * sizeof(long)> t2;
56     sa<sizeof(sink_1_2(source()))    == 2 * sizeof(long)> t5;
57     sa<sizeof(sink_1_2(c_source()))  == 2 * sizeof(long)> t6;
58     return 0;
61 three sink_1_3(volatile       A&);
63 int test1_3()
65                    A a;
66     const          A ca;
67           volatile A va;
68     const volatile A cva;
69     sa<sizeof(sink_1_3(a))           == 3 * sizeof(long)> t1;
70     sa<sizeof(sink_1_3(va))          == 3 * sizeof(long)> t3;
71     return 0;
74 four  sink_1_4(const volatile A&);
76 int test1_4()
78                    A a;
79     const          A ca;
80           volatile A va;
81     const volatile A cva;
82     sa<sizeof(sink_1_4(a))           == 4 * sizeof(long)> t1;
83     sa<sizeof(sink_1_4(ca))          == 4 * sizeof(long)> t2;
84     sa<sizeof(sink_1_4(va))          == 4 * sizeof(long)> t3;
85     sa<sizeof(sink_1_4(cva))         == 4 * sizeof(long)> t4;
86     return 0;
89 five  sink_1_5(               A&&);
91 int test1_5()
93                    A a;
94     const          A ca;
95           volatile A va;
96     const volatile A cva;
97     sa<sizeof(sink_1_5(source()))    == 5 * sizeof(long)> t5;
98     return 0;
101 six   sink_1_6(const          A&&);
103 int test1_6()
105                    A a;
106     const          A ca;
107           volatile A va;
108     const volatile A cva;
109     sa<sizeof(sink_1_6(source()))    == 6 * sizeof(long)> t5;
110     sa<sizeof(sink_1_6(c_source()))  == 6 * sizeof(long)> t6;
111     return 0;
114 seven sink_1_7(volatile       A&&);
116 int test1_7()
118                    A a;
119     const          A ca;
120           volatile A va;
121     const volatile A cva;
122     sa<sizeof(sink_1_7(source()))    == 7 * sizeof(long)> t5;
123     sa<sizeof(sink_1_7(v_source()))  == 7 * sizeof(long)> t7;
124     return 0;
127 eight sink_1_8(const volatile A&&);
129 int test1_8()
131                    A a;
132     const          A ca;
133           volatile A va;
134     const volatile A cva;
135     sa<sizeof(sink_1_8(source()))    == 8 * sizeof(long)> t5;
136     sa<sizeof(sink_1_8(c_source()))  == 8 * sizeof(long)> t6;
137     sa<sizeof(sink_1_8(v_source()))  == 8 * sizeof(long)> t7;
138     sa<sizeof(sink_1_8(cv_source())) == 8 * sizeof(long)> t8;
139     return 0;
142 int main()
144     return test1_1() + test1_2() + test1_3() + test1_4() +
145            test1_5() + test1_6() + test1_7() + test1_8();