1 // I, Howard Hinnant, hereby place this code in the public domain. 2 3 // Test overload resolution among reference types 4 5 // { dg-do compile { target c++11 } } 6 // { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } } 7 8 template <bool> struct sa; 9 template <> struct sa<true> {}; 10 11 struct one {long x[1];}; 12 struct two {long x[2];}; 13 struct three {long x[3];}; 14 struct four {long x[4];}; 15 struct five {long x[5];}; 16 struct six {long x[6];}; 17 struct seven {long x[7];}; 18 struct eight {long 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(); // { dg-warning "deprecated" "" { target c++2a } } 29 const volatile A cv_source(); // { dg-warning "deprecated" "" { target c++2a } } 30 31 // 8 at a time 32 33 one sink_8_12345678( A&); 34 two sink_8_12345678(const A&); 35 three sink_8_12345678(volatile A&); 36 four sink_8_12345678(const volatile A&); 37 five sink_8_12345678( A&&); 38 six sink_8_12345678(const A&&); 39 seven sink_8_12345678(volatile A&&); 40 eight sink_8_12345678(const volatile A&&); 41 42 int test8_12345678() 43 { 44 A a; 45 const A ca; 46 volatile A va; 47 const volatile A cva; 48 sa<sizeof(sink_8_12345678(a)) == 1 * sizeof(long)> t1; 49 sa<sizeof(sink_8_12345678(ca)) == 2 * sizeof(long)> t2; 50 sa<sizeof(sink_8_12345678(va)) == 3 * sizeof(long)> t3; 51 sa<sizeof(sink_8_12345678(cva)) == 4 * sizeof(long)> t4; 52 sa<sizeof(sink_8_12345678(source())) == 5 * sizeof(long)> t5; 53 sa<sizeof(sink_8_12345678(c_source())) == 6 * sizeof(long)> t6; 54 sa<sizeof(sink_8_12345678(v_source())) == 7 * sizeof(long)> t7; 55 sa<sizeof(sink_8_12345678(cv_source())) == 8 * sizeof(long)> t8; 56 return 0; 57 } 58 59 int main() 60 { 61 return test8_12345678(); 62 } 63