// I, Howard Hinnant, hereby place this code in the public domain.

// Test overlaod resolution among referece types

// { dg-do compile }
// { dg-options "-std=c++0x" }

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();

// 4 at a time

one   sink_4_1234(               A&);  // { dg-error "" }
two   sink_4_1234(const          A&);  // { dg-error "" }
three sink_4_1234(volatile       A&);  // { dg-error "" }
four  sink_4_1234(const volatile A&);  // { dg-error "" }

int test4_1234()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1234(v_source());   // { dg-error "no match" }
    sink_4_1234(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1235(               A&);  // { dg-error "" }
two   sink_4_1235(const          A&);  // { dg-error "" }
three sink_4_1235(volatile       A&);  // { dg-error "" }
five  sink_4_1235(               A&&);  // { dg-error "" }

int test4_1235()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1235(cva);          // { dg-error "no match" }
    sink_4_1235(v_source());   // { dg-error "no match" }
    sink_4_1235(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1236(               A&);  // { dg-error "" }
two   sink_4_1236(const          A&);  // { dg-error "" }
three sink_4_1236(volatile       A&);  // { dg-error "" }
six   sink_4_1236(const          A&&);  // { dg-error "" }

int test4_1236()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1236(cva);          // { dg-error "no match" }
    sink_4_1236(v_source());   // { dg-error "no match" }
    sink_4_1236(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1237(               A&);  // { dg-error "" }
two   sink_4_1237(const          A&);  // { dg-error "" }
three sink_4_1237(volatile       A&);  // { dg-error "" }
seven sink_4_1237(volatile       A&&);  // { dg-error "" }

int test4_1237()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1237(cva);          // { dg-error "no match" }
    sink_4_1237(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1245(               A&);  // { dg-error "" }
two   sink_4_1245(const          A&);  // { dg-error "" }
four  sink_4_1245(const volatile A&);  // { dg-error "" }
five  sink_4_1245(               A&&);  // { dg-error "" }

int test4_1245()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1245(v_source());   // { dg-error "no match" }
    sink_4_1245(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1246(               A&);  // { dg-error "" }
two   sink_4_1246(const          A&);  // { dg-error "" }
four  sink_4_1246(const volatile A&);  // { dg-error "" }
six   sink_4_1246(const          A&&);  // { dg-error "" }

int test4_1246()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1246(v_source());   // { dg-error "no match" }
    sink_4_1246(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1247(               A&);  // { dg-error "" }
two   sink_4_1247(const          A&);  // { dg-error "" }
four  sink_4_1247(const volatile A&);  // { dg-error "" }
seven sink_4_1247(volatile       A&&);  // { dg-error "" }

int test4_1247()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1247(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1256(               A&);  // { dg-error "" }
two   sink_4_1256(const          A&);  // { dg-error "" }
five  sink_4_1256(               A&&);  // { dg-error "" }
six   sink_4_1256(const          A&&);  // { dg-error "" }

int test4_1256()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1256(va);           // { dg-error "no match" }
    sink_4_1256(cva);          // { dg-error "no match" }
    sink_4_1256(v_source());   // { dg-error "no match" }
    sink_4_1256(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1257(               A&);  // { dg-error "" }
two   sink_4_1257(const          A&);  // { dg-error "" }
five  sink_4_1257(               A&&);  // { dg-error "" }
seven sink_4_1257(volatile       A&&);  // { dg-error "" }

int test4_1257()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1257(cva);          // { dg-error "no match" }
    sink_4_1257(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1267(               A&);  // { dg-error "" }
two   sink_4_1267(const          A&);  // { dg-error "" }
six   sink_4_1267(const          A&&);  // { dg-error "" }
seven sink_4_1267(volatile       A&&);  // { dg-error "" }

int test4_1267()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1267(cva);          // { dg-error "no match" }
    sink_4_1267(source());     // { dg-error "ambiguous" }
    sink_4_1267(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1345(               A&);  // { dg-error "" }
three sink_4_1345(volatile       A&);  // { dg-error "" }
four  sink_4_1345(const volatile A&);  // { dg-error "" }
five  sink_4_1345(               A&&);  // { dg-error "" }

int test4_1345()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1345(c_source());   // { dg-error "no match" }
    sink_4_1345(v_source());   // { dg-error "no match" }
    sink_4_1345(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1346(               A&);  // { dg-error "" }
three sink_4_1346(volatile       A&);  // { dg-error "" }
four  sink_4_1346(const volatile A&);  // { dg-error "" }
six   sink_4_1346(const          A&&);  // { dg-error "" }

int test4_1346()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1346(v_source());   // { dg-error "no match" }
    sink_4_1346(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1347(               A&);  // { dg-error "" }
three sink_4_1347(volatile       A&);  // { dg-error "" }
four  sink_4_1347(const volatile A&);  // { dg-error "" }
seven sink_4_1347(volatile       A&&);  // { dg-error "" }

int test4_1347()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1347(c_source());   // { dg-error "no match" }
    sink_4_1347(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1356(               A&);  // { dg-error "" }
three sink_4_1356(volatile       A&);  // { dg-error "" }
five  sink_4_1356(               A&&);  // { dg-error "" }
six   sink_4_1356(const          A&&);  // { dg-error "" }

int test4_1356()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1356(cva);          // { dg-error "no match" }
    sink_4_1356(v_source());   // { dg-error "no match" }
    sink_4_1356(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1357(               A&);  // { dg-error "" }
three sink_4_1357(volatile       A&);  // { dg-error "" }
five  sink_4_1357(               A&&);  // { dg-error "" }
seven sink_4_1357(volatile       A&&);  // { dg-error "" }

int test4_1357()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1357(ca);           // { dg-error "no match" }
    sink_4_1357(cva);          // { dg-error "no match" }
    sink_4_1357(c_source());   // { dg-error "no match" }
    sink_4_1357(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1367(               A&);  // { dg-error "" }
three sink_4_1367(volatile       A&);  // { dg-error "" }
six   sink_4_1367(const          A&&);  // { dg-error "" }
seven sink_4_1367(volatile       A&&);  // { dg-error "" }

int test4_1367()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1367(cva);          // { dg-error "no match" }
    sink_4_1367(source());     // { dg-error "ambiguous" }
    sink_4_1367(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1456(               A&);  // { dg-error "" }
four  sink_4_1456(const volatile A&);  // { dg-error "" }
five  sink_4_1456(               A&&);  // { dg-error "" }
six   sink_4_1456(const          A&&);  // { dg-error "" }

int test4_1456()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1456(v_source());   // { dg-error "no match" }
    sink_4_1456(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1457(               A&);  // { dg-error "" }
four  sink_4_1457(const volatile A&);  // { dg-error "" }
five  sink_4_1457(               A&&);  // { dg-error "" }
seven sink_4_1457(volatile       A&&);  // { dg-error "" }

int test4_1457()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1457(c_source());   // { dg-error "no match" }
    sink_4_1457(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1467(               A&);  // { dg-error "" }
four  sink_4_1467(const volatile A&);  // { dg-error "" }
six   sink_4_1467(const          A&&);  // { dg-error "" }
seven sink_4_1467(volatile       A&&);  // { dg-error "" }

int test4_1467()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1467(source());     // { dg-error "ambiguous" }
    sink_4_1467(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1567(               A&);  // { dg-error "" }
five  sink_4_1567(               A&&);  // { dg-error "" }
six   sink_4_1567(const          A&&);  // { dg-error "" }
seven sink_4_1567(volatile       A&&);  // { dg-error "" }

int test4_1567()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1567(cva);          // { dg-error "no match" }
    sink_4_1567(cv_source());  // { dg-error "no match" }
    return 0;
}

one   sink_4_1678(               A&);
six   sink_4_1678(const          A&&);  // { dg-error "" }
seven sink_4_1678(volatile       A&&);  // { dg-error "" }
eight sink_4_1678(const volatile A&&);  // { dg-error "" }

int test4_1678()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_1678(source());  // { dg-error "ambiguous" }
    return 0;
}

two   sink_4_2345(const          A&);  // { dg-error "" }
three sink_4_2345(volatile       A&);  // { dg-error "" }
four  sink_4_2345(const volatile A&);  // { dg-error "" }
five  sink_4_2345(               A&&);  // { dg-error "" }

int test4_2345()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2345(a);            // { dg-error "ambiguous" }
    sink_4_2345(v_source());   // { dg-error "no match" }
    sink_4_2345(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2346(const          A&);  // { dg-error "" }
three sink_4_2346(volatile       A&);  // { dg-error "" }
four  sink_4_2346(const volatile A&);  // { dg-error "" }
six   sink_4_2346(const          A&&);  // { dg-error "" }

int test4_2346()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2346(a);            // { dg-error "ambiguous" }
    sink_4_2346(v_source());   // { dg-error "no match" }
    sink_4_2346(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2347(const          A&);  // { dg-error "" }
three sink_4_2347(volatile       A&);  // { dg-error "" }
four  sink_4_2347(const volatile A&);  // { dg-error "" }
seven sink_4_2347(volatile       A&&);  // { dg-error "" }

int test4_2347()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2347(a);            // { dg-error "ambiguous" }
    sink_4_2347(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2348(const          A&);  // { dg-error "" }
three sink_4_2348(volatile       A&);  // { dg-error "" }
four  sink_4_2348(const volatile A&);  // { dg-error "" }
eight sink_4_2348(const volatile A&&);  // { dg-error "" }

int test4_2348()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2348(a);  // { dg-error "ambiguous" }
    return 0;
}

two   sink_4_2356(const          A&);  // { dg-error "" }
three sink_4_2356(volatile       A&);  // { dg-error "" }
five  sink_4_2356(               A&&);  // { dg-error "" }
six   sink_4_2356(const          A&&);  // { dg-error "" }

int test4_2356()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2356(a);            // { dg-error "ambiguous" }
    sink_4_2356(cva);          // { dg-error "no match" }
    sink_4_2356(v_source());   // { dg-error "no match" }
    sink_4_2356(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2357(const          A&);  // { dg-error "" }
three sink_4_2357(volatile       A&);  // { dg-error "" }
five  sink_4_2357(               A&&);  // { dg-error "" }
seven sink_4_2357(volatile       A&&);  // { dg-error "" }

int test4_2357()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2357(a);            // { dg-error "ambiguous" }
    sink_4_2357(cva);          // { dg-error "no match" }
    sink_4_2357(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2358(const          A&);  // { dg-error "" }
three sink_4_2358(volatile       A&);  // { dg-error "" }
five  sink_4_2358(               A&&);  // { dg-error "" }
eight sink_4_2358(const volatile A&&);  // { dg-error "" }

int test4_2358()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2358(a);  // { dg-error "ambiguous" }
    return 0;
}

two   sink_4_2367(const          A&);  // { dg-error "" }
three sink_4_2367(volatile       A&);  // { dg-error "" }
six   sink_4_2367(const          A&&);  // { dg-error "" }
seven sink_4_2367(volatile       A&&);  // { dg-error "" }

int test4_2367()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2367(a);            // { dg-error "ambiguous" }
    sink_4_2367(cva);          // { dg-error "no match" }
    sink_4_2367(source());     // { dg-error "ambiguous" }
    sink_4_2367(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2368(const          A&);  // { dg-error "" }
three sink_4_2368(volatile       A&);  // { dg-error "" }
six   sink_4_2368(const          A&&);  // { dg-error "" }
eight sink_4_2368(const volatile A&&);  // { dg-error "" }

int test4_2368()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2368(a);  // { dg-error "ambiguous" }
    return 0;
}

two   sink_4_2378(const          A&);  // { dg-error "" }
three sink_4_2378(volatile       A&);  // { dg-error "" }
seven sink_4_2378(volatile       A&&);  // { dg-error "" }
eight sink_4_2378(const volatile A&&);  // { dg-error "" }

int test4_2378()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2378(a);  // { dg-error "ambiguous" }
    return 0;
}

two   sink_4_2456(const          A&);  // { dg-error "" }
four  sink_4_2456(const volatile A&);  // { dg-error "" }
five  sink_4_2456(               A&&);  // { dg-error "" }
six   sink_4_2456(const          A&&);  // { dg-error "" }

int test4_2456()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2456(v_source());   // { dg-error "no match" }
    sink_4_2456(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2457(const          A&);  // { dg-error "" }
four  sink_4_2457(const volatile A&);  // { dg-error "" }
five  sink_4_2457(               A&&);  // { dg-error "" }
seven sink_4_2457(volatile       A&&);  // { dg-error "" }

int test4_2457()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2457(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2467(const          A&);  // { dg-error "" }
four  sink_4_2467(const volatile A&);  // { dg-error "" }
six   sink_4_2467(const          A&&);  // { dg-error "" }
seven sink_4_2467(volatile       A&&);  // { dg-error "" }

int test4_2467()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2467(source());     // { dg-error "ambiguous" }
    sink_4_2467(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2567(const          A&);  // { dg-error "" }
five  sink_4_2567(               A&&);  // { dg-error "" }
six   sink_4_2567(const          A&&);  // { dg-error "" }
seven sink_4_2567(volatile       A&&);  // { dg-error "" }

int test4_2567()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2567(cva);          // { dg-error "no match" }
    sink_4_2567(cv_source());  // { dg-error "no match" }
    return 0;
}

two   sink_4_2678(const          A&);  // { dg-error "" }
six   sink_4_2678(const          A&&);  // { dg-error "" }
seven sink_4_2678(volatile       A&&);  // { dg-error "" }
eight sink_4_2678(const volatile A&&);  // { dg-error "" }

int test4_2678()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_2678(source());  // { dg-error "ambiguous" }
    return 0;
}

three sink_4_3456(volatile       A&);  // { dg-error "" }
four  sink_4_3456(const volatile A&);  // { dg-error "" }
five  sink_4_3456(               A&&);  // { dg-error "" }
six   sink_4_3456(const          A&&);  // { dg-error "" }

int test4_3456()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_3456(v_source());   // { dg-error "no match" }
    sink_4_3456(cv_source());  // { dg-error "no match" }
    return 0;
}

three sink_4_3457(volatile       A&);  // { dg-error "" }
four  sink_4_3457(const volatile A&);  // { dg-error "" }
five  sink_4_3457(               A&&);  // { dg-error "" }
seven sink_4_3457(volatile       A&&);  // { dg-error "" }

int test4_3457()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_3457(c_source());   // { dg-error "no match" }
    sink_4_3457(cv_source());  // { dg-error "no match" }
    return 0;
}

three sink_4_3467(volatile       A&);  // { dg-error "" }
four  sink_4_3467(const volatile A&);  // { dg-error "" }
six   sink_4_3467(const          A&&);  // { dg-error "" }
seven sink_4_3467(volatile       A&&);  // { dg-error "" }

int test4_3467()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_3467(source());     // { dg-error "ambiguous" }
    sink_4_3467(cv_source());  // { dg-error "no match" }
    return 0;
}

three sink_4_3567(volatile       A&);  // { dg-error "" }
five  sink_4_3567(               A&&);  // { dg-error "" }
six   sink_4_3567(const          A&&);  // { dg-error "" }
seven sink_4_3567(volatile       A&&);  // { dg-error "" }

int test4_3567()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_3567(cva);          // { dg-error "no match" }
    sink_4_3567(cv_source());  // { dg-error "no match" }
    return 0;
}

three sink_4_3678(volatile       A&);
six   sink_4_3678(const          A&&);  // { dg-error "" }
seven sink_4_3678(volatile       A&&);  // { dg-error "" }
eight sink_4_3678(const volatile A&&);  // { dg-error "" }

int test4_3678()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_3678(source());  // { dg-error "ambiguous" }
    return 0;
}

four  sink_4_4567(const volatile A&);  // { dg-error "" }
five  sink_4_4567(               A&&);  // { dg-error "" }
six   sink_4_4567(const          A&&);  // { dg-error "" }
seven sink_4_4567(volatile       A&&);  // { dg-error "" }

int test4_4567()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_4567(cv_source());  // { dg-error "no match" }
    return 0;
}

four  sink_4_4678(const volatile A&);
six   sink_4_4678(const          A&&);  // { dg-error "" }
seven sink_4_4678(volatile       A&&);  // { dg-error "" }
eight sink_4_4678(const volatile A&&);  // { dg-error "" }

int test4_4678()
{
                   A a;
    const          A ca = a;
          volatile A va;
    const volatile A cva = a;
    sink_4_4678(source());  // { dg-error "ambiguous" }
    return 0;
}

int main()
{
    return test4_1235() + test4_1236() + test4_1237() + test4_1256() + test4_1257() +
           test4_1267() + test4_1356() + test4_1357() + test4_1467() + test4_1567() +
           test4_1678() + test4_2345() + test4_2346() + test4_2347() + test4_2348() +
           test4_2356() + test4_2357() + test4_2358() + test4_2367() + test4_2368() +
           test4_2378() + test4_2467() + test4_2567() + test4_2678() + test4_3467() +
           test4_3567() + test4_3678() + test4_4678();
}
