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